PHPでは、XMLファイルの解析は、データ交換および構成ファイルを処理する一般的な方法です。 XML_PARSE()関数は、PHPが提供するイベント駆動型XML解析方法です。他のパーサー関数を組み合わせることにより、XMLファイルの要素と属性を読み取ることができます。この記事では、XML_PARSE()を使用してXMLを解析し、要素のコンテンツと属性情報を抽出する方法を理解するために、段階的に段階的に説明します。
最初に、解析エクササイズのための簡単なXML例を準備します。ファイルの名前がexample.xmlであると仮定し、コンテンツは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="101" genre="fiction">
<title>PHP はじめる</title>
<author>チャン・サン</author>
</book>
<book id="102" genre="programming">
<title>詳細な理解 PHP</title>
<author>li si</author>
</book>
</books>
PHPのXML Parsingは、イベントベースのアプローチを使用します。複数のハンドラーを定義し、パーサーにバインドする必要があります。
<?php
$parser = xml_parser_create();
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) {
$data = trim($data);
if (!empty($data)) {
echo "コンテンツ: $data\n";
}
}
// バインド処理関数
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
次に、 example.xmlファイルを読み、パーサーを使用して解析します。
$fp = fopen("example.xml", "r");
if (!$fp) {
die("ファイルを開くことができません");
}
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)
));
}
}
xml_parser_free($parser);
fclose($fp);
?>
スクリプトを実行した後、端子は各要素の開始と終了、属性と値を順番に出力します。例えば:
要素を開始します: BOOKS
要素を開始します: BOOK
財産:
- ID = 101
- GENRE = fiction
要素を開始します: TITLE
コンテンツ: PHP はじめる
終了要素: TITLE
要素を開始します: AUTHOR
コンテンツ: チャン・サン
終了要素: AUTHOR
終了要素: BOOK
...
プロセッサ関数と組み合わせたXML_PARSE()関数を介して、データを抽出する方法を自由に制御し、解析結果をデータベースに保存するか、次のような対応するHTMLページを生成することもできます。
echo "<a href='https://m66.net/book.php?id=101'>チェック《PHP はじめる》</a>";
この方法は、データ読み取りプロセスをカスタマイズするのに非常に実用的です。
XML_PARSE()は、 XMLデータを解析するための軽量で高速な方法を提供します。 Dom Parserよりも根本的ですが、パフォーマンス要件が高い状況またはデータ構造がわかっている状況には非常に適した選択肢です。イベント駆動型の解析をマスターすると、XMLファイルの構造とデータ処理メカニズムをより深く理解するのにも役立ちます。