XMLデータをPHPで処理する場合、 XML_PARSE関数は非常に一般的な解析ツールであり、 XML_PARSER_SET_OPTION関数は、開発者がXML解析の効率と精度を改善するのに役立つより柔軟な解析オプションを提供します。この記事では、XML_PARSER_SET_OPTION関数とXML_PARSE関数を使用して、効率的で安定したXML解析を実現する方法について詳しく説明します。
XML_PARSE :これは、PHPによって提供されるイベント駆動型のXML解析関数であり、通常はXML_PARSER_CREATEおよび関連するコールバック関数と併用されます。パーサーは徐々にXMLデータを解析し、対応するコールバックを呼び出してタグ、コンテンツなどを処理します。
XML_PARSER_SET_OPTION :パーサーのオプションを設定し、ケースに敏感であるかどうか、スキップするかどうか、自動的にエンコードされるかなど、解析動作を調整するために使用されます。
デフォルトでは、 XML_PARSEは、ラベルケースの鈍感や意味のない空白文字を含む、解析時に特定の詳細を無視する場合があります。 XML_PARSER_SET_OPTIONを介して、次のようなさまざまなニーズに応じてパーサーの動作を調整できます。
元のタグ名( xml_option_case_folding )を維持して、ケース変換をオフにします。
空白の文字ノードをスキップして、無効なイベント( xml_option_skip_white )を減らします。
エンコード形式を設定して、多言語サポートを確保します。
次の例は、パーサーの作成、オプションを設定し、コールバック関数を使用してXML_PARSEを効率的に解析する方法を示しています。
<?php
// 作成するXMLパーサー
$parser = xml_parser_create();
// 設定オプション,ケースの崩壊をオフにします,元のタグ名を保持します
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
// 設定オプション,Whitespace文字をスキップします,効率を向上させます
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
// コールバック関数を定義します,スタートタグを処理します
function startElement($parser, $name, $attrs) {
echo "Start element: $name\n";
if (!empty($attrs)) {
foreach ($attrs as $key => $value) {
echo " - Attribute: $key = $value\n";
}
}
}
// コールバック関数を定義します,エンドタグの処理
function endElement($parser, $name) {
echo "End element: $name\n";
}
// コールバック関数を定義します,タグコンテンツの処理
function characterData($parser, $data) {
$data = trim($data);
if (!empty($data)) {
echo "Data: $data\n";
}
}
// バインドコールバック関数
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
// 分析の準備をしますXML弦
$xmlData = <<<XML
<note>
<to>User</to>
<from>ChatGPT</from>
<heading type="reminder">Reminder</heading>
<body>Don't forget to check out <a href="http://m66.net/tutorial">our tutorials</a>!</body>
</note>
XML;
// 分析XMLデータ
if (!xml_parse($parser, $xmlData, true)) {
die(sprintf("XML Error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
// 释放パーサー资源
xml_parser_free($parser);
?>
サンプルXMLでは、すべてのURLドメイン名がM66.NETに置き換えられ、要件を満たしています。
ケースの崩壊をオフにすると、コールバック関数のラベル名が元のXMLテキストと一致することが保証されます。これは、開発者が処理するのに便利です。
Whitespaceのキャラクターをスキップすると、空白のコンテンツによって引き起こされる無効な通話が回避され、パフォーマンスが向上します。
コールバック関数を組み合わせてタグと内容を正確に処理し、柔軟な操作を実現します。
ブロック内の大きなファイルを解析する:大規模なXMLファイルの場合、ブロックごとにファイルコンテンツブロックを読み取り、メモリの爆発を避けるためにセグメントのXML_PARSEを呼び出すことをお勧めします。
合理的な使用オプション:ケースの崩壊をオフにすると、ケースの矛盾を回避できますが、XMLタグがすべて大文字または小文字であると判断した場合、ロジックを簡素化するためにオンにすることもできます。
例外処理:デバッグ効率を改善するために、 XML_Get_Error_CodeおよびXML_Get_Current_Line_Numberを介して、タイムリーなキャプチャエラーをキャプチャして見つけます。
カスタムデータ構造:コールバックでカスタム配列またはオブジェクトを構築します。これは、後続のデータ処理に便利です。
関連タグ:
xml_parse