PHP에서 XML_PARSE는 XML 데이터를 구문 분석하는 데 사용되는 핵심 기능 중 하나입니다. XML 파서 ( XML_PARSER_CREATE )를 결합하여 XML 문자열을 구문 분석하고 콜백 함수를 통해 구문 분석 결과를 처리합니다. 이 기사는 XML_PARSE를 사용하여 XML 문자열을 구문 분석하고 구문 분석 중에 가능한 상황을 올바르게 처리하는 방법을 자세히 소개합니다.
PHP에서는 먼저 XML 파서 인스턴스를 만들어야하며 XML_PARSER_CREATE ()를 사용하여 구현할 수 있습니다.
<?php
$parser = xml_parser_create();
이 $ Parser 변수는 XML 파서의 리소스 핸들이며, 후속 구문 분석 작업을 기반으로 수행해야합니다.
XML 파싱은 이벤트 중심이며 XML 데이터의 다른 부분을 처리하기 위해 콜백 기능을 정의해야합니다. 예를 들어, 시작 태그, 엔드 태그 및 문자 데이터를 구문 분석 할 때 처리 방법을 정의 할 수 있습니다.
function startElement($parser, $name, $attrs) {
echo "태그 시작: $name\n";
if (!empty($attrs)) {
echo "재산:\n";
foreach ($attrs as $key => $value) {
echo " - $key: $value\n";
}
}
}
function endElement($parser, $name) {
echo "엔드 태그: $name\n";
}
function characterData($parser, $data) {
echo "문자 데이터: " . trim($data) . "\n";
}
그런 다음 이러한 콜백 함수를 xml_set_element_handler () 및 xml_set_character_data_handler ()를 사용하여 파서에 연결합니다.
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
이제 XML_PARSE ()를 사용하여 XML 문자열을 구문 분석 할 수 있습니다. 예를 들어:
$xmlData = <<<XML
<root>
<item id="1">첫 번째 프로젝트</item>
<item id="2">두 번째 프로젝트</item>
</root>
XML;
if (!xml_parse($parser, $xmlData, true)) {
die(sprintf("XML 구문 분석 오류: %s 그 과정에서 %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)
));
}
이 예에서는 XML 구조를 정의하고 XML_PARSE ()를 사용하여 구문 분석합니다. 구문 분석이 실패하면 xml_get_error_code () 및 xml_error_string ()을 사용하여 오류 정보를 가져오고 프로그램을 종료하십시오.
XML 파서를 사용한 후 리소스를 해제해야합니다.
xml_parser_free($parser);
구문 분석 된 XML 컨텐츠가 다음과 같습니다.
<root>
<item id="1">첫 번째 프로젝트</item>
<item id="2">두 번째 프로젝트</item>
</root>
스크립트를 실행 한 후 출력 결과는 다음과 같습니다.
태그 시작: ROOT
태그 시작: ITEM
재산:
- ID: 1
문자 데이터: 첫 번째 프로젝트
엔드 태그: ITEM
태그 시작: ITEM
재산:
- ID: 2
문자 데이터: 두 번째 프로젝트
엔드 태그: ITEM
엔드 태그: ROOT
예를 들어 XML_PARSE () 에 의해 구문 분석 된 XML 데이터가 잘못된 경우.
<root>
<item>unded되지 않은 태그
</root>
현재 XML_PARSE ()는 False를 반환하고 구문 분석 오류를 던집니다. xml_error_string () 을 통해 오류 정보를 얻을 수 있습니다.
XML 파일이 크면 세그먼트 된 구문 분석 방법을 사용할 수 있습니다.
$fp = fopen("http://m66.net/example.xml", "r");
while ($data = fread($fp, 4096)) {
if (!xml_parse($parser, $data, feof($fp))) {
die(sprintf("XML 구문 분석 오류: %s 그 과정에서 %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)
));
}
}
fclose($fp);
이렇게하면 전체 XML 파일을 한 번에로드하여 메모리 오버 플로우 문제를 피할 수 있습니다.
XML_PARSE를 사용하여 PHP에서 XML 데이터를 구문 분석하는 것은 효율적인 방법이지만 다른 구문 분석 이벤트를 처리하려면 콜백 기능을 올바르게 설정해야합니다. 또한 XML 구문 분석 오류 및 큰 파일 구문 분석을 처리하는 것이 프로그램 견고성을 향상시키는 열쇠입니다. 이 기사가 PHP의 XML 구문 분석 기능을 더 잘 이해하고 적용하는 데 도움이되기를 바랍니다.