最新のWebアプリケーション開発では、XML(拡張可能なマークアップ言語)はデータ交換形式の1つであり、多くのシナリオで依然として広く使用されています。 PHPは、XMLを処理するためのさまざまな関数ライブラリを提供します。その中には、 XML_PARSEとDOMXMLが2つの一般的な解析方法であり、それぞれ異なるニーズに適しています。この記事では、これら2つの方法を個別に紹介し、実用的なコード例を提供して、XMLデータの解析スキルを効率的に習得するのに役立ちます。
XML_PARSEは、PHPのXMLパーサー機能であり、イベントベースの解析方法(Sax Parsingとも呼ばれます)に属します。 XMLデータを読み取るプロセス中に特定のコールバック関数をトリガーします。これは、ドキュメント全体をメモリにロードする必要がないため、大きなXMLファイルの処理に適しています。
<?php
$xml_data = <<<XML
<books>
<book>
<title>PHP プログラミングの練習</title>
<author>チャン・サン</author>
</book>
<book>
<title>XML そして Web 仕える</title>
<author>li si</author>
</book>
</books>
XML;
$parser = xml_parser_create("UTF-8");
function startElement($parser, $name, $attrs) {
echo "要素を開始します:$name\n";
}
function endElement($parser, $name) {
echo "終了要素:$name\n";
}
function characterData($parser, $data) {
$data = trim($data);
if (!empty($data)) {
echo "データ:$data\n";
}
}
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
if (!xml_parse($parser, $xml_data, true)) {
die("XML 解析エラー:" . xml_error_string(xml_get_error_code($parser)));
}
xml_parser_free($parser);
?>
要素を開始します:BOOKS
要素を開始します:BOOK
要素を開始します:TITLE
データ:PHP プログラミングの練習
終了要素:TITLE
要素を開始します:AUTHOR
データ:チャン・サン
終了要素:AUTHOR
終了要素:BOOK
要素を開始します:BOOK
要素を開始します:TITLE
データ:XML そして Web 仕える
終了要素:TITLE
要素を開始します:AUTHOR
データ:li si
終了要素:AUTHOR
終了要素:BOOK
終了要素:BOOKS
利点:速い解析速度と低メモリの使用量。
該当するシナリオ:大規模なXMLファイルは、XMLコンテンツを変更せずに読み取る必要があります。
DOMXMLは、XMLドキュメント全体をDOMツリーにロードすることにより、HTML DOMのようなXMLデータを操作できる、より構造化されたXML処理方法を提供します。
注:PHP5以来、 DomxMLはDOM拡張機能(つまり、Domdocumentクラス)に置き換えられており、この記事では後者の例を採用しています。
<?php
$xml_string = <<<XML
<books>
<book>
<title>PHP プログラミングの練習</title>
<author>チャン・サン</author>
<link>https://www.m66.net/book/php</link>
</book>
<book>
<title>XML そして Web 仕える</title>
<author>li si</author>
<link>https://www.m66.net/book/xml</link>
</book>
</books>
XML;
$doc = new DOMDocument();
$doc->loadXML($xml_string);
$books = $doc->getElementsByTagName("book");
foreach ($books as $book) {
$title = $book->getElementsByTagName("title")->item(0)->nodeValue;
$author = $book->getElementsByTagName("author")->item(0)->nodeValue;
$link = $book->getElementsByTagName("link")->item(0)->nodeValue;
echo "本のタイトル:$title\n";
echo "著者:$author\n";
echo "リンク:$link\n\n";
}
?>
本のタイトル:PHP プログラミングの練習
著者:チャン・サン
リンク:https://www.m66.net/book/php
本のタイトル:XML そして Web 仕える
著者:li si
リンク:https://www.m66.net/book/xml
利点:XMLの読み取り、変更、生成に適した、明確な構造と操作が簡単です。
適用可能なシナリオ:中小規模のXMLファイル、構造の変更、または新しいドキュメントを作成する必要があります。