XML 데이터, 특히 네임 스페이스가있는 문서를 처리 할 때는 PHP의 XML 파서 (국외 거주자)를 사용하는 것이 유연하고 효율적인 방법입니다. 이 기사는 xml_set_end_namespace_decl_handler 함수의 사용을 설명하는 데 중점을두고 완전한 예제와 결합하여 컴포지트 프로세스 중에 함수를 올바르게 활용하고 네임 스페이스 선언의 끝을 처리하는 방법을 설명합니다.
PHP는 네임 스페이스 관련 프로세싱에서 XML_PARSER_CREATE , XML_PARSE , XML_PARSE , XML_ELENMEN_HANDLER 등과 같은 일련의 이벤트 중심 XML 파싱 함수를 제공 합니다 . 각각.
네임 스페이스를 시작하는 처리가 더 일반적으로 사용되지만, 특히 중첩이 복잡 할 때 또는 스코프 스택을 유지해야 할 때 엔딩 처리는 똑같이 중요합니다. xml_set_end_namespace_decl_handler를 사용하면 네임 스페이스 끝에서 정리 작업을 수행하거나 네임 스페이스 스택을 유지 관리하거나 디버깅을 위해 로그 로그를 수행 할 수 있습니다.
bool xml_set_end_namespace_decl_handler ( resource $parser , callable $handler )
$ parser : xml_parser_create 에 의해 생성 된 파서 리소스.
$ handler : 기능 처리기 (Resource $ Parser, String $ Prefix) 형식의 콜백 함수는 네임 스페이스 선언 끝에 호출됩니다.
다음은 xml_set_end_namespace_decl_handler를 사용하는 완전한 예입니다.
<?php
$xml = <<<XML
<?xml version="1.0"?>
<root xmlns:h="http://gitbox.net/hello" xmlns:f="http://gitbox.net/foo">
<h:child>Content</h:child>
<f:child>Another</f:child>
</root>
XML;
$parser = xml_parser_create();
// 네임 스페이스 처리를 설정합니다
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) {
echo "Namespace Start: prefix = {$prefix}, uri = {$uri}\n";
});
// 네임 스페이스 엔드 선언 프로세서
xml_set_end_namespace_decl_handler($parser, function($parser, $prefix) {
echo "Namespace End: prefix = {$prefix}\n";
});
// 요소 프로세서
xml_set_element_handler($parser,
function($parser, $name, $attrs) {
echo "Start Element: {$name}\n";
},
function($parser, $name) {
echo "End Element: {$name}\n";
}
);
// 구문 분석을 실행하십시오
if (!xml_parse($parser, $xml, true)) {
$error = xml_error_string(xml_get_error_code($parser));
$line = xml_get_current_line_number($parser);
die("XML Error: {$error} at line {$line}\n");
}
xml_parser_free($parser);
위의 스크립트를 실행하고 다음을 출력하십시오.
Namespace Start: prefix = h, uri = http://gitbox.net/hello
Namespace Start: prefix = f, uri = http://gitbox.net/foo
Start Element: root
Start Element: h:child
End Element: h:child
Start Element: f:child
End Element: f:child
End Element: root
Namespace End: prefix = f
Namespace End: prefix = h
출력에서 우리는 다음을 볼 수 있습니다.
네임 스페이스 선언 순서는 문서의 정의와 일치합니다.
요소 구문 분석이 완료된 후 xml_set_end_namespace_decl_handler는 네임 스페이스의 끝을 올바르게 캡처합니다.
구문 분석 중에 네임 스페이스 스코프 스택을 유지하는 경우 스택을 해제하기에 좋은시기입니다.
범위 제어 : XML 구문 분석 (예 : 파서 구성 또는 트리 구조 구조)에서 네임 스페이스 스코프를 사용하는 경우 시작 및 종료 네임 스페이스 선언 프로세서를 모두 사용해야합니다.
디버깅 도구 : XML_SET_END_NAMESPACE_DECL_HANDLER를 사용하여 네임 스페이스 충돌, 중첩 및 믹싱과 같은 복잡한 상황을 디버깅 할 때 XML 문서의 구조를 더 잘 이해하는 데 도움이됩니다.
네임 스페이스 스택 디자인 : PHP 배열을 사용하여 스택 구조를 시뮬레이션하고, 시작 에 시작하고 끝날 때 스택을 배치하여 현재 네임 스페이스 컨텍스트를보다 정확하게 추적 할 수 있습니다.
xml_set_end_namespace_decl_handler는 일반적으로 요소 프로세서로 사용되지 않지만 복잡한 XML을 다룰 때, 특히 여러 네임 스페이스를 혼합 할 때 매우 중요한 보조 역할을 제공 할 수 있습니다. 사용을 마스터하면 XML 파서가 더 강력하고 강력해질 수 있습니다. 이 기사가 PHP를 사용하여 XML을 구문 분석 할 때이 강력한 도구 기능을 최대한 활용하는 데 도움이되기를 바랍니다.