PHP에서 XML 데이터를 처리 할 때 XML_PARSE 기능은 매우 일반적인 구문 분석 도구이며 XML_PARSER_SET_OPTION 기능은 개발자가 XML 구문 분석의 효율성과 정확도를 향상시키는 데 도움이되는보다 유연한 구문 분석 옵션을 제공합니다. 이 기사는 XML_PARSER_SET_OPTION 함수와 XML_PARSE 기능을 사용하여 효율적이고 안정적인 XML 구문 분석을 달성하는 방법을 자세히 설명합니다.
XML_PARSE : PHP가 제공하는 이벤트 중심의 XML 구문 분석 기능으로, 일반적으로 XML_PARSER_CREATE 및 관련 콜백 기능과 함께 사용됩니다. 파서는 점차 XML 데이터를 구문 분석하고 해당 콜백을 호출하여 태그, 내용 등을 처리합니다.
XML_PARSER_SET_OPTION : 파서의 옵션을 설정하고 구문 분석 동작을 조정하는 데 사용됩니다. 예 : 사례에 민감한 지, 건너 뛰는 지, 자동으로 인코딩되는지 여부 등과 같은 구문 분석 동작.
기본적으로 XML_PARSE는 라벨 케이스가 무의미하거나 무의미한 공백 문자를 포함하는 등의 구문 분석시 특정 세부 사항을 무시할 수 있습니다. XML_PARSER_SET_OPTION을 통해 파서 동작은 다음과 같은 다른 요구에 따라 조정할 수 있습니다.
원래 태그 이름 ( xml_option_case_folding )을 유지하고 케이스 변환을 끄십시오.
빈 문자 노드를 건너 뛰고 유효하지 않은 이벤트를 줄입니다 ( XML_OPTION_SKIP_WHITE ).
다국어 지원을 보장하기 위해 인코딩 형식을 설정하십시오.
다음 예제는 파서를 생성하고 옵션을 설정하고 콜백 함수를 사용하여 XML_PARSE를 효율적으로 구문 분석하는 방법을 보여줍니다.
<?php
// 만들다XML파서
$parser = xml_parser_create();
// 설정 옵션,케이스 붕괴를 끄십시오,원래 태그 이름을 유지하십시오
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
// 설정 옵션,공백 문자를 건너 뜁니다,효율성을 향상시킵니다
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
// 콜백 함수를 정의합니다,처리 시작 태그
function startElement($parser, $name, $attrs) {
echo "Start element: $name\n";
if (!empty($attrs)) {
foreach ($attrs as $key => $value) {
echo " - Attribute: $key = $value\n";
}
}
}
// 콜백 함수를 정의합니다,처리 엔드 태그
function endElement($parser, $name) {
echo "End element: $name\n";
}
// 콜백 함수를 정의합니다,태그 컨텐츠 처리
function characterData($parser, $data) {
$data = trim($data);
if (!empty($data)) {
echo "Data: $data\n";
}
}
// 콜백 함수 바인드
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
// 분석 준비XML끈
$xmlData = <<<XML
<note>
<to>User</to>
<from>ChatGPT</from>
<heading type="reminder">Reminder</heading>
<body>Don't forget to check out <a href="http://m66.net/tutorial">our tutorials</a>!</body>
</note>
XML;
// 분석XML데이터
if (!xml_parse($parser, $xmlData, 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);
?>
샘플 XML에서 모든 URL 도메인 이름은 요구 사항을 충족하는 M66.NET 으로 대체됩니다.
Case Collapse를 끄면 콜백 함수의 레이블 이름이 원래 XML 텍스트와 일치하는지 확인하여 개발자가 처리하기에 편리합니다.
공백 문자를 건너 뛰면 빈 컨텐츠로 인한 잘못된 호출을 피하고 성능을 향상시킵니다.
콜백 기능을 결합하여 태그와 내용을 정확하게 처리하여 유연한 작업을 달성합니다.
큰 파일을 블록으로 구문 분석 : 대형 XML 파일의 경우 블록으로 파일 내용을 읽고 메모리 폭발을 피하기 위해 세그먼트에서 XML_PARSE를 호출하는 것이 좋습니다.
합리적인 사용 옵션 : 케이스 붕괴를 끄면 사례 불일치를 피할 수 있지만 XML 태그가 모두 대문자 또는 소문자 인 것으로 판단하면 논리를 단순화하기 위해 켜질 수도 있습니다.
예외 처리 : XML_GET_ERROR_CODE 및 XML_GET_CURRENT_LINE_NUMBER를 통해 구문 분석 오류를 적시에 찾아서 디버깅 효율성을 향상시킵니다.
사용자 정의 데이터 구조 : 콜백에 사용자 정의 배열 또는 객체를 빌드하여 후속 데이터 처리에 더 편리합니다.
관련 태그:
xml_parse