PHP에서 XML을 처리하는 방법에는 여러 가지가 있으며 그 중 XML_PARSE는 XML 구조에 대한 제어 요구가 더 강한 개발자에게 적합한 기본 기능입니다. 이 기사에서는 XML_PARSE 기능을 사용하여 CDATA 영역이 포함 된 XML 문서를 구문 분석하는 방법을 설명합니다.
XML에서 <! [CDATA [...]]>은 구문자에게 XML 구문으로 구문 분석되어서는 안된다는 것을 구문자에게 알리는 데 사용되는 지침입니다. 이는 HTML 또는 스크립트 코드와 같은 특수 문자가 포함 된 콘텐츠에 매우 유용합니다.
예:
<note>
<to>Tom</to>
<message><![CDATA[Hello <b>Tom</b>, welcome to <a href="https://m66.net">our site</a>!]]></message>
</note>
XML_PARSE 는 XML 라인별로 PHP의 함수입니다. CDATA 영역을 구문 분석하는 데 사용하려면 일반적으로 XML_PARSER_CREATE () 및 사용자 정의 프로세서 기능을 사용해야합니다.
$parser = xml_parser_create();
시작 태그, 엔드 태그 및 문자 데이터 프로세서의 세 가지 프로세서 기능을 등록해야합니다.
$data = [];
function startElement($parser, $name, $attrs) {
global $data;
$data['current'] = $name;
}
function endElement($parser, $name) {
global $data;
$data['current'] = null;
}
function characterData($parser, $value) {
global $data;
if (!isset($data['values'][$data['current']])) {
$data['values'][$data['current']] = '';
}
$data['values'][$data['current']] .= $value;
}
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
$xml = <<<XML
<note>
<to>Tom</to>
<message><![CDATA[Hello <b>Tom</b>, welcome to <a href="https://m66.net">our site</a>!]]></message>
</note>
XML;
if (!xml_parse($parser, $xml, true)) {
die(sprintf("XML Error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
xml_parser_free($parser);
print_r($data['values']);
출력은 다음과 같습니다.
Array
(
[TO] => Tom
[MESSAGE] => Hello <b>Tom</b>, welcome to <a href="https://m66.net">our site</a>!
)
참고 : 모든 태그 이름은 대문자로 변환됩니다.
XML_PARSE는 복합체 또는 대량 XML 데이터를 처리하는 데 적합한 이벤트 중심의 XML 구문 분석 방법입니다. CDATA가 포함 된 경우 컨텐츠를 정상적으로 캡처하려면 문자 데이터 프로세서 만 설정하면됩니다. DOM 또는 SimpleXML보다 사용하는 것이 더 복잡하지만 성능과 유연성에 몇 가지 장점이 있습니다.
프로젝트에 높은 구문 분석 효율이 필요하거나 XML에서 이벤트 처리를 사용자 정의 해야하는 경우 XML_PARSE는 좋은 선택이 될 것입니다.