XML 문서와 함께 작업 할 때 PHP는 XML 데이터를 구문 분석하고 조작하는 데 도움이되는 일련의 강력한 기능을 제공합니다. 특히 XML 데이터를 구문 분석 할 때는 종종 다른 유형의 요소에 직면하여 각 요소에 다르게 응답해야합니다. 이 경우 XML_SET_DEFAULT_HANDLER 함수는 중요한 역할을 수행 할 수 있으므로 구체적으로 처리되지 않은 XML 요소에 대한 기본 처리 방법을 정의 할 수 있습니다.
이 기사는 XML_SET_DEFAULT_HANDLER를 사용하여 다양한 유형의 XML 요소를 유연하게 처리하고 예제를 통해 특정 사용을 보여주는 방법을 자세히 소개합니다.
XML_SET_DEFAULT_HANDLER 는 PHP의 XML Extension에서 제공하는 함수입니다. 명시적인 처리 규칙이없는 XML 요소가 호출되는 XML 파서에 대한 기본 처리 기능을 설정할 수 있습니다. 간단히 말해서,이 기능은 "상향식"메커니즘으로, 구체적으로 처리되지 않은 모든 요소를 처리 할 수 있도록합니다.
bool xml_set_default_handler ( resource $parser , callable $handler )
$ parser : XML 파서 리소스, 일반적으로 XML_PARSER_CREATE를 통해 생성 된 파서입니다.
$ 핸들러 : 기본 처리 기능. 이 함수는 다음 매개 변수를 수신합니다.
$ parser : 현재 파서 리소스.
$ 데이터 : 현재 읽은 XML 데이터 블록 (String).
먼저 XML 파서를 만듭니다. 일반적으로 XML_PARSER_CREATE를 사용하여 새 XML 파서를 만듭니다.
$parser = xml_parser_create();
기본 처리 함수는 파서가 별도로 처리 할 수없는 요소가 발생할 때 호출되는 함수입니다. 이 함수는 파서 리소스 및 데이터 컨텐츠의 두 매개 변수를 허용합니다.
function default_handler($parser, $data) {
echo "Default handler: " . $data . "\n";
}
기본 처리 기능은 XML_SET_DEFAULT_HANDLER를 통해 지정됩니다.
xml_set_default_handler($parser, 'default_handler');
다음으로 XML_PARSE를 사용하여 XML 데이터를 구문 분석 할 수 있습니다. 명시 적으로 처리되지 않은 요소가 있으면 기본 처리 기능이 호출됩니다.
$xml_data = "<root><element>Content 1</element><unknown>Content 2</unknown></root>";
xml_parse($parser, $xml_data);
xml_parser_free($parser);
이 예에서 XML 파서가 <hollown> 태그를 만나면 태그에 대한 특정 처리 기능이 정의되지 않기 때문에 기본 처리 기능 Default_handler가 트리거되고 출력은 다음과 같습니다.
Default handler: Content 2
여러 유형의 요소가 포함 된 복잡한 XML 파일을 처리한다고 가정 해 봅시다. 이 경우 XML_SET_DEFAULT_HANDLER 및 기타 요소 처리 함수 (예 : XML_SET_ELENMEN_HANDLER )를 사용하여 다양한 상황을 유연하게 처리 할 수 있습니다.
$parser = xml_parser_create();
// 요소의 시작 및 끝에 대한 처리 기능 정의
function start_element($parser, $name, $attrs) {
echo "Start element: $name\n";
}
function end_element($parser, $name) {
echo "End element: $name\n";
}
// 기본 처리 기능을 정의하십시오
function default_handler($parser, $data) {
echo "Default handler: " . $data . "\n";
}
// 요소의 시작 및 끝에 대한 처리 기능 설정
xml_set_element_handler($parser, 'start_element', 'end_element');
// 기본 처리 기능을 설정하십시오
xml_set_default_handler($parser, 'default_handler');
// 분석 XML 데이터
$xml_data = "<root><name>John</name><age>30</age><unknown>Unknown content</unknown></root>";
xml_parse($parser, $xml_data);
// 释放분석器资源
xml_parser_free($parser);
출력 결과는 다음과 같습니다.
Start element: root
Start element: name
End element: name
Start element: age
End element: age
Start element: unknown
Default handler: Unknown content
End element: unknown
End element: root
이 예에서는 start_element 및 end_element 함수는 각각 XML 요소의 시작 및 엔드 태그를 처리하는 반면, 기본 처리 기능 Default_handler는 <hollown> 태그에서 내용을 처리합니다.
XML 데이터에 URL 또는 기타 특수 데이터가 포함 된 경우 유연하게 처리 할 수도 있습니다. 기본 처리 기능에서 데이터를 구문 분석하고 URL을 추출하며 추가 처리를 수행 할 수 있습니다. 예를 들어, XML의 모든 URL을 M66.NET 도메인 이름으로 가리 키려면 다음을 수행 할 수 있습니다.
function default_handler($parser, $data) {
// 포함 여부를 감지합니다 URL,도메인 이름을 바꾸십시오
$data = preg_replace('/https?:\/\/([a-zA-Z0-9.-]+)\//', 'https://m66.net/', $data);
echo "Processed data: " . $data . "\n";
}
이러한 방식으로, 우리는 모든 해결 된 URL이 M66.net 도메인 이름으로 균일하게 수정되도록 할 수 있습니다.
xml_set_default_handler 함수는 명시 적으로 처리되지 않은 요소를 처리하는 유연한 방법을 제공합니다. xml_set_element_handler 및 기타 관련 기능을 결합하여 다양한 유형의 요소에 따라 처리를 개인화하고 기본 처리 기능에서 특수 사례를 균일하게 관리 할 수 있습니다. URL 처리와 같은 일부 특수 XML 컨텐츠의 경우 정규 표현식 등을 통해 유연하게 처리 할 수 있습니다.
이러한 방법을 통해 PHP는 다양한 복잡한 XML 데이터를 효율적으로 처리하고 구문 분석하여 코드가보다 강력하고 유연 할 수 있도록 도와줍니다.