현재 위치: > 최신 기사 목록> xml_set_end_namespace_decl_handler xml_parse와 협력하기위한 모범 사례

xml_set_end_namespace_decl_handler xml_parse와 협력하기위한 모범 사례

gitbox 2025-05-19

XML 데이터, 특히 네임 스페이스가있는 문서를 처리 할 때는 PHP의 XML 파서 (국외 거주자)를 사용하는 것이 유연하고 효율적인 방법입니다. 이 기사는 xml_set_end_namespace_decl_handler 함수의 사용을 설명하는 데 중점을두고 완전한 예제와 결합하여 컴포지트 프로세스 중에 함수를 올바르게 활용하고 네임 스페이스 선언의 끝을 처리하는 방법을 설명합니다.

1. 배경 지식

PHP는 네임 스페이스 관련 프로세싱에서 XML_PARSER_CREATE , XML_PARSE , XML_PARSE , XML_ELENMEN_HANDLER 등과 같은 일련의 이벤트 중심 XML 파싱 함수를 제공 합니다 . 각각.

네임 스페이스를 시작하는 처리가 더 일반적으로 사용되지만, 특히 중첩이 복잡 할 때 또는 스코프 스택을 유지해야 할 때 엔딩 처리는 똑같이 중요합니다. xml_set_end_namespace_decl_handler를 사용하면 네임 스페이스 끝에서 정리 작업을 수행하거나 네임 스페이스 스택을 유지 관리하거나 디버깅을 위해 로그 로그를 수행 할 수 있습니다.

2. 기능 프로토 타입

 bool xml_set_end_namespace_decl_handler ( resource $parser , callable $handler )
  • $ parser : xml_parser_create 에 의해 생성 된 파서 리소스.

  • $ handler : 기능 처리기 (Resource $ Parser, String $ Prefix) 형식의 콜백 함수는 네임 스페이스 선언 끝에 호출됩니다.

3. 실제 적용 사례

다음은 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);

4. 출력 결과 설명

위의 스크립트를 실행하고 다음을 출력하십시오.

 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

출력에서 우리는 다음을 볼 수 있습니다.

  1. 네임 스페이스 선언 순서는 문서의 정의와 일치합니다.

  2. 요소 구문 분석이 완료된 후 xml_set_end_namespace_decl_handler는 네임 스페이스의 끝을 올바르게 캡처합니다.

  3. 구문 분석 중에 네임 스페이스 스코프 스택을 유지하는 경우 스택을 해제하기에 좋은시기입니다.

V. 응용 프로그램 제안

  • 범위 제어 : XML 구문 분석 (예 : 파서 ​​구성 또는 트리 구조 구조)에서 네임 스페이스 스코프를 사용하는 경우 시작종료 네임 스페이스 선언 프로세서를 모두 사용해야합니다.

  • 디버깅 도구 : XML_SET_END_NAMESPACE_DECL_HANDLER를 사용하여 네임 스페이스 충돌, 중첩 및 믹싱과 같은 복잡한 상황을 디버깅 할 때 XML 문서의 구조를 더 잘 이해하는 데 도움이됩니다.

  • 네임 스페이스 스택 디자인 : PHP 배열을 사용하여 스택 구조를 시뮬레이션하고, 시작 에 시작하고 끝날 때 스택을 배치하여 현재 네임 스페이스 컨텍스트를보다 정확하게 추적 할 수 있습니다.

6. 결론

xml_set_end_namespace_decl_handler는 일반적으로 요소 프로세서로 사용되지 않지만 복잡한 XML을 다룰 때, 특히 여러 네임 스페이스를 혼합 할 때 매우 중요한 보조 역할을 제공 할 수 있습니다. 사용을 마스터하면 XML 파서가 더 강력하고 강력해질 수 있습니다. 이 기사가 PHP를 사용하여 XML을 구문 분석 할 때이 강력한 도구 기능을 최대한 활용하는 데 도움이되기를 바랍니다.