현재 위치: > 최신 기사 목록> XML_SET_END_NAMESPACE_DECL_HANDLER와 결합하여 네임 스페이스 끝에서 추가 메타 데이터를 얻는 방법?

XML_SET_END_NAMESPACE_DECL_HANDLER와 결합하여 네임 스페이스 끝에서 추가 메타 데이터를 얻는 방법?

gitbox 2025-05-29

XML 문서를 구문 분석 할 때 PHP의 국외 거주자 확장자는 개발자에게 문서의 다양한 구조의 시작 및 끝에 응답 할 수있는 일련의 강력한 이벤트 처리 기능을 제공합니다. 그중 XML_SET_END_NAMESPACE_DECL_HANDLER 함수는 네임 스페이스 선언 끝에서 콜백을 트리거하도록 특별히 설계되었으며 네임 스페이스와 관련된 메타 데이터를 수집하는 데 매우 적합합니다.

1. 네임 스페이스 엔드 프로세서를 이해하십시오

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

이 콜백은 개발자의 추가 처리를 위해 네임 스페이스 접두사로 전달됩니다.

2. 실제 응용 시나리오 : 메타 데이터를 얻습니다

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);

3. 코드 설명

  1. 네임 스페이스 엔드 프로세서 정의 <br> 익명 함수를 사용하여 프로세서를 정의하고 네임 스페이스 선언 끝에서 현재 시간을 기록하고 접두사를 기록하십시오.

  2. XML 예제
    xmlns : hxmlns : f 각각 http://gitbox.net/hellohttp://gitbox.net/foo 에 해당하는 두 개의 네임 스페이스를 정의합니다.

  3. 메타 데이터 저장소 <br> 모든 END 이벤트 레코드는 $ namespacemetadata 배열에 저장되며 로깅, 디버깅 또는 통계적 목적으로 사용될 수 있습니다.

4. 실제 사용을 확장하십시오

  • 네임 스페이스 범위를 디버깅하는 종료 시간

  • 네임 스페이스에서 중첩 구조의 복잡성을 분석합니다

  • 네임 스페이스 라이프 사이클 로그를 생성합니다

  • 완전한 추적을 위해 시작 프로세서 (XML_SET_START_NAMESPACE_DECL_HANDLER)와 결합합니다

V. 결론

xml_set_end_namespace_decl_handler 함수를 사용하면 네임 스페이스 선언 수명주기가 끝날 때 일련의 정제 된 논리를 실행할 수 있습니다. 이 기능은 복잡한 네임 스페이스 구조, 특히 네임 스페이스 엔드 이벤트를 수집, 녹음 또는 네임 스페이스 엔드 이벤트에 응답 해야하는 시나리오에서 XML 문서를 처리 할 때 특히 중요합니다. 다른 파서 기능과 함께 사용하면 XML 데이터 처리의 유연성과 유지 관리가 크게 향상됩니다.