XMLデータを処理する場合、PHPはXML_PARSEとXML_SET_CHARACTER_DATA_HANDLERがXMLテキストノードを解析するための重要なツールです。これらの2つの関数は、XMLでテキストコンテンツを効果的に読み取り、処理するために連携します。この記事では、簡単な例を使用して、それらを使用してXMLデータを解析する方法を示します。
XML_PARSE()は、XMLデータの解析を開始するために使用されるコア関数です。パラメーターとしてパーサーリソースとXML文字列を受信し、各コールはその一部を解析します。
XML_SET_CHARACTER_DATA_HANDLER()は、 XMLでテキストノードに遭遇したときにトリガーされるコールバック関数を設定するために使用されます。つまり、タグ間のすべてのプレーンテキスト(CDATA)コンテンツは、この関数を通じて処理されます。
例を使用して、これら2つの関数を使用してXMLでテキストコンテンツを抽出する方法を示しましょう。
<?php
// 1. 準備する XML 弦
$xmlData = <<<XML
<books>
<book>
<title>PHP プログラミングの練習</title>
<author>チャン・サン</author>
</book>
<book>
<title>詳細な理解 XML</title>
<author>li si</author>
</book>
</books>
XML;
// 2. 初期化a XML パーサー
$parser = xml_parser_create();
// 3. 抽出されたテキストコンテンツを保存します
$textContents = [];
// 4. テキストを処理するコールバック関数を定義します
function handleCharacterData($parser, $data) {
global $textContents;
// 空白の文字をクリーンアップします
$data = trim($data);
if (!empty($data)) {
$textContents[] = $data;
}
}
// 5. 文字データ処理機能を設定します
xml_set_character_data_handler($parser, "handleCharacterData");
// 6. 分析 XML データ
if (!xml_parse($parser, $xmlData, true)) {
die("XML 間違い: " . xml_error_string(xml_get_error_code($parser)));
}
// 7. 释放パーサー资源
xml_parser_free($parser);
// 8. 抽出されたテキストコンテンツを出力します
echo "抽出されたテキストコンテンツは次のとおりです:<br>";
foreach ($textContents as $text) {
echo htmlspecialchars($text) . "<br>";
}
?>
上記のPHPスクリプトを実行した後、次の出力は次のとおりです。
抽出されたテキストコンテンツは次のとおりです:
PHP プログラミングの練習
チャン・サン
詳細な理解 XML
li si
この解析方法は、小さなXMLデータの処理、またはタグ間でテキストコンテンツをさらに処理する場合に特に適しています。例えば:
RSSフィードのニュースタイトルとコンテンツをクロールします。
parses https://api.m66.net/data.xmlから返されたカスタムXML応答。
構成ファイルまたはデータファイルなどでテキストを抽出します。
xml_parser_create()で作成されたパーサーは、使用後にxml_parser_free()を介してリソースをリリースする必要があります。
テキストコンテンツの処理機能は、干渉を避けるために白人文字をフィルタリングする必要があることがよくあります。
PHPのXMLパーサーはイベント駆動型であり、さまざまなXMLパーツを処理するために複数の処理関数( XML_SET_ELEMENT_HANDLERなど)の登録が必要です。
XML_PARSEとXML_SET_CHARACTER_DATA_HANDLERを組み合わせることで、XMLのテキストコンテンツを非常に柔軟に処理できます。単純な文字列抽出であろうと複雑な論理処理であろうと、適切なコールバック設計を通じて達成できます。
この記事が、XMLがPHPでどのように解析するかをよりよく理解するのに役立つことを願っています!データをデータベースまたはWebページ表示とさらに組み合わせる必要がある場合は、コード構造を引き続き拡張して、より豊富なアプリケーション機能を実現できます。