PHP에는 DOM, SimpleXML 또는 XML 파서 사용과 같은 XML 데이터를 구문 분석하는 방법에는 여러 가지가 있습니다. 이 기사는 XML 파서와 함께 기본 XML_PARSE () 함수를 사용하여 처리하는 방법을 소개합니다.
XML_PARSE () 는 PHP의 XML 확장 기능 중 하나이며 XML 문자열을 구문 분석을 위해 구문 분석기에 공급하는 데 사용됩니다. xml_parser_create () , xml_set_element_handler () 와 같은 함수와 함께 사용되며 레이블 구조를 미세하게 제어 해야하는 시나리오를 처리하는 데 적합합니다.
XML을 동적으로 생성하는 인터페이스가 있다고 가정합니다.
https://api.m66.net/data/feed.xml
이 주소에서 XML 데이터를 가져 와서 <item> 태그 아래 제목 및 링크 필드를 구문 분석하려고합니다.
<?php
// 초기화 파서
$parser = xml_parser_create();
// 데이터 저장을위한 배열
$parsedData = [];
$currentTag = '';
$currentItem = [];
// 시작 태그 프로세서를 정의하십시오
function startElement($parser, $name, $attrs) {
global $currentTag, $currentItem;
$currentTag = strtolower($name);
if ($currentTag === 'item') {
$currentItem = [];
}
}
// 엔드 태그 프로세서를 정의하십시오
function endElement($parser, $name) {
global $currentTag, $currentItem, $parsedData;
if (strtolower($name) === 'item') {
$parsedData[] = $currentItem;
}
$currentTag = '';
}
// 문자 데이터 프로세서를 정의합니다
function characterData($parser, $data) {
global $currentTag, $currentItem;
$data = trim($data);
if (!$data) return;
if ($currentTag === 'title') {
$currentItem['title'] = (isset($currentItem['title']) ? $currentItem['title'] : '') . $data;
} elseif ($currentTag === 'link') {
$currentItem['link'] = (isset($currentItem['link']) ? $currentItem['link'] : '') . $data;
}
}
// 프로세서를 설정하십시오
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
// 리모컨에서 얻으십시오 XML 콘텐츠
$url = "https://api.m66.net/data/feed.xml";
$xmlData = file_get_contents($url);
if (!$xmlData) {
die("얻을 수 없습니다 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_parser_free($parser);
// 출력 결과
echo "<pre>";
print_r($parsedData);
echo "</pre>";
?>
Array
(
[0] => Array
(
[title] => 샘플 제목1
[link] => https://www.m66.net/item/123
)
[1] => Array
(
[title] => 샘플 제목2
[link] => https://www.m66.net/item/456
)
)
XML_PARSE ()를 사용하여 XML 데이터 구조를 완전히 제어 할 수 있으며 복잡한 또는 비표준 구조 XML 파일에 적합합니다. SimpleXML만큼 간결하지는 않지만 사용자 정의 처리 흐름이 필요한 시나리오에 매우 유용합니다.