최신 웹 애플리케이션에서 XML 파일은 여전히 구성, 데이터 교환 및 영구 스토리지에 일반적으로 사용됩니다. 자주 변경된 XML 파일의 경우 버전 제어 메커니즘을 구현하면 데이터 관리의 신뢰성을 크게 향상시킬 수 있습니다. PHP는 XML_SET_END_NAMESPACE_DECL_HANDLER ()를 사용하면 XML 네임 스페이스 선언 끝에서 콜백 처리를 수행 할 수있는 완전한 색소폰 스타일 XML 구문 분석 기능 세트를 제공합니다. 이 메커니즘은 XML 구조적 변화를 추적하는 데 영리하게 사용될 수 있으므로 기본 버전 제어를 달성 할 수 있습니다.
이 함수는 파서가 네임 스페이스 선언 끝에 구문 분석 할 때 트리거되는 콜백 함수를 설정하는 데 사용됩니다. 이는 여러 네임 스페이스가있는 복잡한 XML 문서를 처리 할 때 유용하며 버전 제어를위한 구조 인식 진입 점을 제공합니다.
기능 프로토 타입은 다음과 같습니다.
bool xml_set_end_namespace_decl_handler(XMLParser $parser, callable $handler)
$ parser : xml_parser_create () 에 의해 생성 된 파서 리소스.
$ 핸들러 : 네임 스페이스의 끝을 처리하는 콜백 함수.
XML 파일의 버전 제어 기능을 구현하려면 xml_set_end_namespace_decl_handler ()를 사용하여 네임 스페이스 변경 사항을 식별하고 각 구조 변경을 기록하며 해당 버전의 데이터를 저장할 수 있습니다.
달성해야 할 핵심 사항은 다음과 같습니다.
XML 파서를 초기화하십시오
네임 스페이스의 시작 및 끝에 대한 처리 기능 설정
구조 변경에 "버전 스냅 샷"을 녹음하십시오
스냅 샷 데이터 저장 버전 스토리지 (예 : 데이터베이스 또는 파일 시스템)
<?php
$xmlData = file_get_contents('https://gitbox.net/xml/sample.xml');
$parser = xml_parser_create_ns("UTF-8", ":");
$versions = [];
$currentVersion = [];
$versionCount = 0;
// 네임 스페이스 끝의 처리 기능
function endNsHandler($parser, $prefix)
{
global $versionCount, $currentVersion, $versions;
// 각 네임 스페이스 끝에 스냅 샷을 기록하십시오
$versionCount++;
$versions["version_$versionCount"] = $currentVersion;
$currentVersion = []; // 현재 버전 데이터를 재설정합니다
}
// 처리 요소 시작 이벤트(구조 정보를 수집하는 데 사용됩니다)
function startElement($parser, $name, $attrs)
{
global $currentVersion;
$currentVersion[] = [
'element' => $name,
'attributes' => $attrs
];
}
// 처리 기능 설정
xml_set_element_handler($parser, "startElement", null);
xml_set_end_namespace_decl_handler($parser, "endNsHandler");
// 분석 XML 데이터
if (!xml_parse($parser, $xmlData, true)) {
die("XML Error: " . xml_error_string(xml_get_error_code($parser)));
}
// 출력 버전 정보
foreach ($versions as $version => $data) {
echo "=== $version ===\n";
foreach ($data as $node) {
echo "Element: {$node['element']}, Attributes: " . json_encode($node['attributes']) . "\n";
}
}
xml_parser_free($parser);
?>
이 구조 인식 버전 제어 체계는 다음과 같이 널리 사용될 수 있습니다.
구성 파일 버전 백업 및 복구
XML 컨텐츠의 다중 사용자 협업 편집의 충돌 감지
문서 형식 변경의 자동 추적
PHP 개발자는 XML_SET_END_NAMESPACE_DECL_HANDLER ()를 사용하여 외부 라이브러리를 사용하지 않고 XML 파일 구조를 지각하고 기본 버전 제어 로직을 구현할 수 있습니다. GIT만큼 복잡하고 완전하지는 않지만 많은 경량 시스템에서 구조적 변화 기록 및 컨텐츠 복구와 같은 요구 사항을 처리하기에 충분합니다.
인터페이스 또는 데이터베이스 스토리지 버전을 도와 주어야합니까?