현재 위치: > 최신 기사 목록> xml_set_end_namespace_decl_handler를 사용하여 XML 파일에서 네임 스페이스를 구문 분석하고 수정하는 방법?

xml_set_end_namespace_decl_handler를 사용하여 XML 파일에서 네임 스페이스를 구문 분석하고 수정하는 방법?

gitbox 2025-05-20

php에서 xml_set_end_namespace_decl_handler 함수는 XML 파싱시 네임 스페이스 선언의 끝을 처리하는 콜백 함수입니다. 이를 통해 XML 구문 분석 중에, 특히 네임 스페이스로 XML 문서를 구문 분석 할 때 네임 스페이스 선언을 캡처하고 수정하는 방법에 네임 스페이스 변경 사항을 처리 할 수 ​​있습니다.

1. XML_SET_END_NAMESPACE_DECL_HANDLER 에 대한 기본 소개

xml_set_end_namespace_decl_handler 함수는 XML을 구문 분석 할 때 네임 스페이스 선언 끝에서 호출되는 콜백 함수를 설정하는 데 사용됩니다. 이 콜백 함수는 네임 스페이스 변경을 기록하거나 네임 스페이스에서 필요한 처리를 수행하는 데 사용될 수 있습니다.

2. 함수의 기본 구문

 bool xml_set_end_namespace_decl_handler ( resource $parser , callable $handler )
  • $ parser : XML_PARSER_CREATE 를 통해 생성 된 XML Parser Resource.

  • $ 핸들러 : 파서가 네임 스페이스 선언의 끝을 만나면 콜백 함수가 호출됩니다.

3. 실제 사례 : XML을 구문 분석하고 네임 스페이스를 수정합니다

네임 스페이스가 포함 된 일부 요소가 포함 된 XML 파일이 있다고 가정하고 파싱 중에 네임 스페이스 변경을 캡처하고 수정하려고합니다.

다음은 xml_set_end_namespace_decl_handler를 사용하여 XML을 구문 분석하고 네임 스페이스 끝에서 접두사를 수정하는 방법을 보여주는 간단한 사례입니다.

 <?php
// 만들다 XML 파서
$parser = xml_parser_create();

// 네임 스페이스 선언으로 끝나는 콜백 함수 정의
function endNamespaceDecl($parser, $prefix, $uri) {
    echo "Namespace ended: Prefix = '$prefix', URI = '$uri'\n";
    
    // 여기서는 네임 스페이스를 수정할 수 있습니다,예를 들어, 특정 사항을 교체하십시오 URI 또는 접두사를 변경하십시오
    if ($uri == "http://www.example.com/oldnamespace") {
        echo "Changing namespace URI\n";
        $uri = "http://www.gitbox.net/newnamespace";  // 새로 교체하십시오 URI
    }
}

// 네임 스페이스 선언 끝에서 콜백 함수 설정
xml_set_end_namespace_decl_handler($parser, "endNamespaceDecl");

// XML 데이터 예
$xmlData = <<<XML
<root xmlns:old="http://www.example.com/oldnamespace">
    <old:item>Item 1</old:item>
</root>
XML;

// 분석 XML 데이터
if (!xml_parse($parser, $xmlData, true)) {
    echo "XML Parsing error: " . xml_error_string(xml_get_error_code($parser)) . "\n";
    exit;
}

// 释放파서
xml_parser_free($parser);
?>

4. 코드 설명

  1. XML 파서 생성 : 먼저 XML_PARSER_CREATE를 사용하여 XML 파서 리소스를 만듭니다.

  2. 콜백 함수 정의 : EndNamespacedEcl 이라는 함수를 정의합니다.이 함수는 파서가 네임 스페이스 선언의 끝을 만나면 호출됩니다. 현재 종료 된 네임 스페이스의 접두사와 URI를 출력합니다.

  3. 네임 스페이스 수정 : 우리가 정의한 이전 네임 스페이스 ( http://www.example.com/oldnamespace )를 만나면 콜백 함수에서 네임 스페이스 URI를 수정할 수 있습니다 (예 : http://www.gitbox.net/newnamespace 로 대체).

  4. 구문 분석 XML : 네임 스페이스와 함께 XML 데이터 조각을 제공하고 XML_PARSE 기능을 통해 데이터를 구문 분석하기 시작합니다.

  5. 릴리스 파서 : 구문 분석이 완료된 후에는 파서 자원을 해제해야합니다.

5. 출력 결과

위의 코드를 실행하면 출력이 표시됩니다.

 Namespace ended: Prefix = 'old', URI = 'http://www.example.com/oldnamespace'
Changing namespace URI

이는 콜백 함수가 네임 스페이스 선언 끝에서 발사되었으며 네임 스페이스 URI를 성공적으로 수정했음을 나타냅니다.

6. 요약

XML_SET_END_NAMESPACE_DECL_HANDLER 기능을 사용하면 XML 데이터를 구문 분석 할 때 네임 스페이스 변경을 캡처하고 필요한 경우 네임 스페이스를 수정할 수 있습니다. 이 방법을 통해 XML 네임 스페이스를 동적으로 수정 해야하는 시나리오에 적합한 XML 문서에서 네임 스페이스를 유연하게 처리 할 수 ​​있습니다.