XML 문서를 구문 분석 할 때 네임 스페이스를 사용하면 요소와 속성 이름 간의 충돌이 효과적으로 피할 수 있습니다. 특히 다양한 XML 사양이 혼합 된 사용에 사용되는 시나리오에서 PHP의 XML 파서 (국외 거주자 기반)를 사용하여 여러 네임 스페이스로 XML 파일을 처리 할 때는 네임 스페이스의 시작과 끝을 합리적으로 관리하는 것이 특히 중요합니다.
이 기사는 XML_SET_END_NAMESPACE_DECL_HANDLER 기능을 사용하여 여러 네임 스페이스가 동시에 끝나는 상황을 처리하는 방법에 중점을 두어 XML 구조를 올바르게 구문 분석하고 추적 할 수 있습니다.
xml_set_end_namespace_decl_handler는 PHP가 네임 스페이스 선언의 끝이 발생할 때 파서에 의해 트리거 된 프로세서 (콜백 함수)를 설정하기 위해 제공되는 함수입니다. 프로토 타입은 다음과 같습니다.
bool xml_set_end_namespace_decl_handler(XMLParser $parser, callable $handler)
여기서 $ parser는 xml_parser_create () 에 의해 생성 된 파서 리소스 인 반면, $ 핸들러는 네임 스페이스 스코프가 끝날 때 호출되는 콜백 함수입니다.
다음과 같이 XML 구조를 상상해보십시오.
<root xmlns:h="http://gitbox.net/html" xmlns:f="http://gitbox.net/form">
<h:table>
<f:input type="text"/>
</h:table>
</root>
위의 XML에서 H 및 F 는 두 개의 다른 네임 스페이스입니다. <루트> 태그 전체에 걸쳐 있지만 더 복잡한 문서에서는 중첩 네임 스페이스의 구조가 나타날 수 있으며 요소가 닫히는 경우 동시에 여러 네임 스페이스가 끝납니다.
우리는이 네임 스페이스 끝에서 자원을 녹음, 점검 또는 공개하는 것과 같은 일부 작업을 수행하고자합니다.
다음은 xml_set_end_namespace_decl_handler를 사용하여 네임 스페이스의 끝을 처리하는 방법을 보여주는 완전한 예입니다.
<?php
$xml = <<<XML
<root xmlns:h="http://gitbox.net/html" xmlns:f="http://gitbox.net/form">
<h:table>
<f:input type="text"/>
</h:table>
</root>
XML;
// 만들다 XML 파서
$parser = xml_parser_create_ns();
// 네임 스페이스 엔드 프로세서를 설정하십시오
xml_set_end_namespace_decl_handler($parser, function($parser, $prefix) {
echo "네임 스페이스의 끝: 접두사 = $prefix\n";
});
// 기본 요소 프로세서를 설정하십시오
xml_set_element_handler($parser,
function($parser, $name, $attrs) {
echo "시작 요소: $name\n";
},
function($parser, $name) {
echo "결말 요소: $name\n";
}
);
// 분석 XML 데이터
if (!xml_parse($parser, $xml, true)) {
die(sprintf(
"XML 실수: %s 에서 %d 좋아요",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)
));
}
// 释放파서资源
xml_parser_free($parser);
?>
위의 코드를 실행하면 다음과 유사한 출력이 표시됩니다.
시작 요소: root
시작 요소: h:table
시작 요소: f:input
결말 요소: f:input
결말 요소: h:table
결말 요소: root
네임 스페이스의 끝: 접두사 = h
네임 스페이스의 끝: 접두사 = f
보시다시피, 문서의 시작 부분에서 네임 스페이스가 선언되지만 <루트> 요소가 닫히면 실제로 스코프가 종료되고 xml_set_end_namespace_decl_handler는 이 동작을 성공적으로 캡처합니다.
네임 스페이스 프로세서는 XML_PARSER_CREATE_NS ()를 사용하여 파서를 만드는 경우에만 적용될 수 있습니다.
XML_SET_END_NAMESPACE_DECL_HANDLER 의 콜백 함수는 파서 리소스 및 네임 스페이스 접두사의 두 매개 변수 만 수신합니다.
여러 네임 스페이스가 동시에 끝나면 각 네임 스페이스마다 한 번 콜백이 호출됩니다.
PHP 개발자는 XML_SET_END_NAMESPACE_DECL_HANDLER 기능을 통해 특히 복잡한 XML 문서를 다룰 때 네임 스페이스 수명주기를 정확하게 제어 할 수 있습니다. 웹 서비스 및 구성 파일 구문 분석과 같은 시나리오에서 올바른 데이터 처리 기능을 보장하기 위해 네임 스페이스를 시작하고 끝나는 프로세서를 결합하여 올바른 데이터 처리 기능을 보장 할 수 있습니다.