XML 문서를 구문 분석 할 때 PHP의 국외 거주자 확장자는 개발자에게 문서의 다양한 구조의 시작 및 끝에 응답 할 수있는 일련의 강력한 이벤트 처리 기능을 제공합니다. 그중 XML_SET_END_NAMESPACE_DECL_HANDLER 함수는 네임 스페이스 선언 끝에서 콜백을 트리거하도록 특별히 설계되었으며 네임 스페이스와 관련된 메타 데이터를 수집하는 데 매우 적합합니다.
xml_set_end_namespace_decl_handler는 네임 스페이스 선언 끝 프로세서를 설정하기 위해 PHP가 제공하는 함수이며 그 정의는 다음과 같습니다.
bool xml_set_end_namespace_decl_handler(XMLParser $parser, callable $handler)
$ Parser는 XML_PARSER_CREATE () 에서 만든 XML 파서 리소스입니다.
$ handler는 네임 스페이스 선언 끝에서 호출되는 콜백 함수이며 기능 양식은 다음과 같습니다.
function handler(XMLParser $parser, string $prefix): void
이 콜백은 개발자의 추가 처리를 위해 네임 스페이스 접두사로 전달됩니다.
xml_set_end_namespace_decl_handler 와 결합하여 네임 스페이스 범위 끝에서 정리, 카운팅 또는 메타 정보를 녹음하는 것과 같은 작업, 특히 네임 스페이스별로 데이터를 구성 해야하는 시스템에 대한 작업을 수행 할 수 있습니다.
다음은 XML 네임 스페이스 끝에서 추가 메타 데이터를 얻고 콘솔에 인쇄하는 방법을 보여주는 샘플 코드입니다.
<?php
// 만들다 XML 파서
$parser = xml_parser_create();
// 메타 데이터를 저장하는 배열
$namespaceMetadata = [];
// 네임 스페이스 엔드 프로세서를 설정하십시오
xml_set_end_namespace_decl_handler($parser, function($parser, $prefix) use (&$namespaceMetadata) {
// 네임 스페이스 접두사의 최종 정보를 기록하십시오
$timestamp = date('Y-m-d H:i:s');
$namespaceMetadata[] = [
'prefix' => $prefix,
'ended_at' => $timestamp
];
echo "네임 스페이스 '{$prefix}' 존재하다 {$timestamp} 마치다。\n";
});
// 시뮬레이션 XML 데이터(含네임 스페이스)
$xmlData = <<<XML
<root xmlns:h="http://gitbox.net/hello" xmlns:f="http://gitbox.net/foo">
<h:header>머리</h:header>
<f:footer>꼬리</f:footer>
</root>
XML;
// 분석 XML 데이터
if (!xml_parse($parser, $xmlData, true)) {
echo "XML 실수: " . xml_error_string(xml_get_error_code($parser));
exit;
}
// 销毁파서资源
xml_parser_free($parser);
// 输出所有元데이터
print_r($namespaceMetadata);
네임 스페이스 엔드 프로세서 정의 <br> 익명 함수를 사용하여 프로세서를 정의하고 네임 스페이스 선언 끝에서 현재 시간을 기록하고 접두사를 기록하십시오.
XML 예제
xmlns : h 및 xmlns : f 각각 http://gitbox.net/hello 및 http://gitbox.net/foo 에 해당하는 두 개의 네임 스페이스를 정의합니다.
메타 데이터 저장소 <br> 모든 END 이벤트 레코드는 $ namespacemetadata 배열에 저장되며 로깅, 디버깅 또는 통계적 목적으로 사용될 수 있습니다.
네임 스페이스 범위를 디버깅하는 종료 시간
네임 스페이스에서 중첩 구조의 복잡성을 분석합니다
네임 스페이스 라이프 사이클 로그를 생성합니다
완전한 추적을 위해 시작 프로세서 (XML_SET_START_NAMESPACE_DECL_HANDLER)와 결합합니다
xml_set_end_namespace_decl_handler 함수를 사용하면 네임 스페이스 선언 수명주기가 끝날 때 일련의 정제 된 논리를 실행할 수 있습니다. 이 기능은 복잡한 네임 스페이스 구조, 특히 네임 스페이스 엔드 이벤트를 수집, 녹음 또는 네임 스페이스 엔드 이벤트에 응답 해야하는 시나리오에서 XML 문서를 처리 할 때 특히 중요합니다. 다른 파서 기능과 함께 사용하면 XML 데이터 처리의 유연성과 유지 관리가 크게 향상됩니다.