네임 스페이스는 XML 데이터를 처리 할 때 매우 중요한 개념입니다. 이를 통해 개발자는 명명 충돌을 피하고 XML 문서에 더 큰 표현력을 발휘할 수 있습니다. PHP는 XML_SET_END_NAMESPACE_DECL_HANDLER 함수가 네임 스페이스 선언 끝에 콜백 함수를 등록하는 데 사용되는 이벤트 중심의 XML 구문 분석 인터페이스 (국외 파서 기반)를 제공합니다. 이 기사는이 기능을 사용하여 XML 구문 분석 중에 네임 스페이스를 동적으로 관리하고 프로세스하는 방법을 자세히 설명합니다.
xml_set_end_namespace_decl_handler 는 php의 XML 파서 관련 기능입니다. 프로토 타입은 다음과 같습니다.
bool xml_set_end_namespace_decl_handler(XMLParser $parser, callable $handler)
기능은 네임 스페이스 선언 끝에서 지정된 콜백 함수를 호출하는 것입니다. 콜백 함수의 서명은 다음과 같습니다.
function handler(XMLParser $parser, string $prefix)
안에:
$ parser 는 현재 XML 파서 리소스입니다.
$ prefix는 선언을 종료하는 네임 스페이스 접두사입니다.
일부 복잡한 XML 문서에서는 다른 요소가 다른 네임 스페이스를 사용할 수 있습니다. 그러한 문서를 구문 분석 할 때는 다음과 같은 다음과 같은 실시간으로 선언을 추적하고 네임 스페이스 선언을 취소하는 것이 중요합니다.
동적으로 네임 스페이스를 비즈니스 로직에 맵핑합니다.
보다 정확한 XML 검증 또는 필터를 구현합니다.
타사 XML 형식과의 호환성을 향상시킵니다.
다음은 xml_set_end_namespace_decl_handler를 사용하여 네임 스페이스의 수명주기를 추적하는 방법을 보여주는 완전한 예입니다.
<?php
// 네임 스페이스 스택을 정의하십시오
$namespaceStack = [];
// 파서를 만듭니다
$parser = xml_parser_create_ns();
// 네임 스페이스 분리기를 설정합니다
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
// 네임 스페이스의 시작 및 끝에 대한 처리 기능 설정
xml_set_start_namespace_decl_handler($parser, function($parser, $prefix, $uri) use (&$namespaceStack) {
echo "네임 스페이스 선언을 시작하십시오: 접두사={$prefix}, URI={$uri}\n";
array_push($namespaceStack, $prefix);
});
xml_set_end_namespace_decl_handler($parser, function($parser, $prefix) use (&$namespaceStack) {
echo "네임 스페이스 선언을 종료하십시오: 접두사={$prefix}\n";
$popped = array_pop($namespaceStack);
if ($popped !== $prefix) {
echo "경고하다:네임 스페이스 스태킹 순서는 일치하지 않습니다!\n";
}
});
// 예 XML 데이터
$xml = <<<XML
<root xmlns:h="http://gitbox.net/html" xmlns:f="http://gitbox.net/form">
<h:table>
<h:tr>
<h:td>데이터1</h:td>
<h:td>데이터2</h:td>
</h:tr>
</h:table>
<f:form>
<f:input>입력하다</f:input>
</f:form>
</root>
XML;
// 분석 XML
if (!xml_parse($parser, $xml, true)) {
echo "XML 분석错误: " . xml_error_string(xml_get_error_code($parser)) . "\n";
}
// 리소스를 자유롭게합니다
xml_parser_free($parser);
?>
위의 스크립트를 실행할 때 네임 스페이스의 시작 및 끝이 트리거되고 관련 정보가 인쇄되어 개발자가 동적으로 네임 스페이스의 선언주기를 이해하도록 도와줍니다.
출력 예 :
네임 스페이스 선언을 시작하십시오: 접두사=h, URI=http://gitbox.net/html
네임 스페이스 선언을 시작하십시오: 접두사=f, URI=http://gitbox.net/form
네임 스페이스 선언을 종료하십시오: 접두사=f
네임 스페이스 선언을 종료하십시오: 접두사=h
파서 모드는 네임 스페이스를 지원해야합니다 . 파서를 만들 때 xml_parser_create_ns () 사용하십시오.
처리 순서 문제 : 네임 스페이스의 종료 순서는 선언 순서와 반대 여야하며 스택 구조를 통해 감지 할 수 있습니다.
URI의 독창성 : 비즈니스 처리 중에 URI를 접두사에만 의존하기보다는 실제 처리의 기초로 URI를 사용하는 것이 좋습니다.
xml_set_end_namespace_decl_handler 를 통해 PHP 개발자는 XML을 구문 분석하는 동안 네임 스페이스 수명주기에 대한 정보를 얻어 고급 XML 데이터 처리 전략을 구현할 수 있습니다. 콜백 처리 및 종료 선언의 콜백 처리 메커니즘을 결합하여 XML 중심 시스템 (예 : 구성 구문 분석, 데이터 가져 오기 등)을 구축하는 데 큰 의미가있는 문서 구조의 의미 정보를 정확하게 제어 할 수 있습니다.