PHP에서 XML 문서를 처리 할 때 일반적으로 사용되는 구문 분석 방법 중 하나는 이벤트 중심 파서 - XML 파서 (XML Parser)입니다. XML을 국외로 구문 분석 할 때 다양한 콜백 함수를 등록하여 요소 시작, 요소 종료, 문자 데이터 등과 같은 다양한 XML 노드를 처리 할 수 있습니다. XML의 주석 내용에 대한 PHP의 국외 거주자는 기본적으로 특수 콜백 기능이 없지만 XML_SET_DEFAULT_HANDLER 기능을 사용할 수 있습니다.
XML_SET_DEFAULT_HANDLER는 기본 처리 기능을 설정하는 PHP의 XML 파서의 함수입니다. 이 기본 처리 기능은 특수 콜백 함수로 처리되지 않은 XML 조각이 발생할 때 호출됩니다. 주석, CDATA 섹션 등은 기본 처리 기능을 트리거합니다.
따라서 xml_set_default_handler를 통해 주석 내용을 캡처하여 그에 따라 처리 할 수 있습니다.
다음은 XML에서 댓글 내용을 처리하기 위해 XML_SET_DEFAULT_HANDLER를 사용하는 방법을 보여주는 예입니다.
<?php
// aXML파서
$parser = xml_parser_create();
// 기본 처리 기능을 설정하십시오,주석 및 기타 가입 컨텐츠를 캡처하십시오
xml_set_default_handler($parser, 'defaultHandler');
// 기본 처리 기능을 정의하십시오
function defaultHandler($parser, $data) {
// 주석 내용은 일반적으로입니다<!--시작,~에 의해-->종결
if (preg_match('/^<!--(.*)-->$/s', $data, $matches)) {
echo "주석 내용: " . trim($matches[1]) . "\n";
} else {
// 这里可~에 의해处理其他未捕获的콘텐츠,좋다CDATA기다리다
echo "기본적으로 프로세스 컨텐츠: " . trim($data) . "\n";
}
}
// 읽다XML데이터
$xml = <<<XML
<?xml version="1.0"?>
<!-- 이것은XML댓글 -->
<root>
<child>콘텐츠</child>
<!-- 子元素댓글 -->
</root>
XML;
// 분석XML데이터
if (!xml_parse($parser, $xml, true)) {
die(sprintf("XML분석错误: %s 에서 %d 좋아요",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
// 리소스를 자유롭게합니다
xml_parser_free($parser);
?>
우리는 Parser $ Parser를 만들었습니다.
defaulthandler 함수는 XML_SET_DEFAULT_HANDLER를 사용하여 등록되어 특정 콜백에서 캡처하지 않은 모든 컨텐츠를 처리합니다.
기본 처리 기능에서 정규식은 데이터가 주석인지 여부를 감지하는 데 사용되며, 그렇다면 주석 내용이 출력됩니다.
구체적으로 처리되지 않은 다른 컨텐츠도 출력되지만 여기서는 주석에 중점을 둡니다.
주석 내용: 이것은XML댓글
기본적으로 프로세스 컨텐츠:
기본적으로 프로세스 컨텐츠:
주석 내용: 子元素댓글
보시다시피, 주석 내용은 성공적으로 캡처되고 출력됩니다.
XML_SET_DEFAULT_HANDLER를 사용하면 주석을 포함하여 다른 특수 콜백에서 캡처하지 않은 XML의 컨텐츠를 처리 할 수 있습니다. 간단한 정기 일치를 통해 주석 텍스트를 해당 처리를 위해 추출 할 수 있습니다.
이 접근법은 국외 파서를 사용할 때 로깅, 필터링 또는 컨텐츠 추출과 같은 주석을 사용자 정의하는 데 특히 적합합니다.