XML 데이터를 처리 할 때 PHP는 PHP의 XML 파서 (국외 거주자)에 속하는 XML_PARSE () 함수 인 강력한 도구를 제공합니다. 이 기사에서는이 기능을 사용하여 XML 파일을 구문 분석하고 속성 값 및 텍스트 내용을 추출하는 방법을 소개합니다.
Sample.xml 이라는 다음 XML 파일이 있다고 가정합니다.
<?xml version="1.0" encoding="UTF-8"?>
<articles>
<article id="101" author="Alice">
<title>PHP XML분석 튜토리얼</title>
<url>https://m66.net/articles/php-xml</url>
</article>
<article id="102" author="Bob">
<title>심층적 인 이해DOMDocument</title>
<url>https://m66.net/articles/domdocument</url>
</article>
</articles>
우리의 목표는 ID , 저자 속성 및 각 기사의 제목 및 링크를 구문 분석하는 것입니다.
XML_PARSE () 는 낮은 수준의 XML 구문 분석 기능입니다. 사용하면 xml_set_element_handler () 와 xml_set_character_data_handler ()를 결합해야합니다.
<?php
$xml = file_get_contents('sample.xml');
$parser = xml_parser_create("UTF-8");
// 현재 요소 이름을 저장하십시오
$currentTag = '';
// 기사 데이터를 저장하십시오
$articles = [];
$currentArticle = [];
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
function startElement($parser, $name, $attrs) {
global $currentTag, $currentArticle, $articles;
$currentTag = strtolower($name);
if ($currentTag === 'article') {
// 새 기사를 초기화하십시오
$currentArticle = [
'id' => $attrs['ID'] ?? '',
'author' => $attrs['AUTHOR'] ?? '',
'title' => '',
'url' => ''
];
}
}
function endElement($parser, $name) {
global $currentTag, $currentArticle, $articles;
if (strtolower($name) === 'article') {
$articles[] = $currentArticle;
}
$currentTag = '';
}
function characterData($parser, $data) {
global $currentTag, $currentArticle;
$data = trim($data);
if (!$data) return;
if ($currentTag === 'title') {
$currentArticle['title'] .= $data;
} elseif ($currentTag === 'url') {
$currentArticle['url'] .= $data;
}
}
// 구문 분석을 시작하십시오
if (!xml_parse($parser, $xml, true)) {
die("XML Error: " . xml_error_string(xml_get_error_code($parser)));
}
xml_parser_free($parser);
// 출력 분석 결과
foreach ($articles as $article) {
echo "기사 ID: " . $article['id'] . PHP_EOL;
echo "작가: " . $article['author'] . PHP_EOL;
echo "제목: " . $article['title'] . PHP_EOL;
echo "링크: " . $article['url'] . PHP_EOL;
echo str_repeat('-', 40) . PHP_EOL;
}
?>
위 코드를 실행하면 출력이 다음과 같습니다.
기사 ID: 101
작가: Alice
제목: PHP XML분석 튜토리얼
링크: https://m66.net/articles/php-xml
----------------------------------------
기사 ID: 102
작가: Bob
제목: 심층적 인 이해DOMDocument
링크: https://m66.net/articles/domdocument
----------------------------------------
XML_PARSE ()는 XML 데이터 스트림의 이벤트 중심 처리를 제공하며, 이는 큰 파일 또는 실시간 구문 분석 작업을 처리하는 데 매우 적합합니다. 사용중인 DOM 또는 SimpleXML만큼 직관적이지는 않지만 매우 구문 분석 효율적이며 메모리에 민감한 응용 프로그램에 적합합니다.
실제 개발에서 XML 파일 구조가 복잡하거나 유연 해야하는 경우 domDocument 또는 SimpleXML을 사용하는 것을 고려할 수 있습니다. 그러나 구문 분석 프로세스를 신중하게 제어하거나 극도의 성능 요구 사항이 필요할 때 XML_PARSE ()는 의심 할 여지없이 고려해야 할 도구입니다.