XMLドキュメントをPHPで処理する場合、一般的に使用される解析方法の1つは、イベント駆動型パーサー-XMLパーサー(Expat)です。 XMLをExpatで解析する場合、さまざまなコールバック関数を登録して、XMLの注釈コンテンツの要素スタート、要素エンド、文字データなど、さまざまなXMLノードを処理できます。PHPのExpatはデフォルトでは特別なコールバック関数を持ちませんが、 XML_SET_DEFAULT_HANDLER関数を使用して、アニット情報をキャプチャできます。
XML_SET_DEFAULT_HANDLERは、PHPのXMLパーサーの関数であり、デフォルトの処理関数を設定します。このデフォルトの処理関数は、特別なコールバック関数によって処理されないXMLフラグメントが発生したときに呼び出されます。コメント、CDATAセクションなどは、デフォルトの処理機能をトリガーします。
したがって、 XML_SET_DEFAULT_HANDLERを介して注釈コンテンツをキャプチャし、それに応じて処理できます。
xml_set_default_handlerを使用してxmlでコメントコンテンツを処理する方法を示す例を以下に示します。
<?php
// aを作成しますXMLパーサー
$parser = xml_parser_create();
// デフォルトの処理機能を設定します,コメントやその他の猛攻撃のコンテンツをキャプチャします
xml_set_default_handler($parser, 'defaultHandler');
// デフォルトの処理関数を定義します
function defaultHandler($parser, $data) {
// コメントのコンテンツは通常です<!--始まり,による-->エンディング
if (preg_match('/^<!--(.*)-->$/s', $data, $matches)) {
echo "コメントコンテンツ: " . trim($matches[1]) . "\n";
} else {
// 这里可による处理其他未捕获的コンテンツ,のようにCDATA待って
echo "デフォルトでコンテンツを処理します: " . trim($data) . "\n";
}
}
// 読むXMLデータ
$xml = <<<XML
<?xml version="1.0"?>
<!-- これはですXMLのコメント -->
<root>
<child>コンテンツ</child>
<!-- 子元素のコメント -->
</root>
XML;
// 分析XMLデータ
if (!xml_parse($parser, $xml, true)) {
die(sprintf("XML分析错误: %s で %d わかりました",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
// 無料のリソース
xml_parser_free($parser);
?>
パーサー$パーサーを作成しました。
Defaulthandler関数はXML_SET_DEFAULT_HANDLERを使用して登録され、特定のコールバックによってキャプチャされないすべてのコンテンツを処理します。
デフォルトの処理関数では、正規表現を使用して、データが注釈であるかどうかを検出します。もしそうなら、注釈コンテンツは出力です。
特別に処理されていない他のコンテンツも出力されますが、ここでは主にコメントに焦点を当てます。
コメントコンテンツ: これはですXMLのコメント
デフォルトでコンテンツを処理します:
デフォルトでコンテンツを処理します:
コメントコンテンツ: 子元素のコメント
ご覧のとおり、コメントコンテンツは正常にキャプチャされ、出力されます。
xml_set_default_handlerを使用して、コメントを含む他の特別なコールバックによってキャプチャされないXMLのコンテンツを処理できます。単純な通常のマッチングにより、コメントテキストを対応する処理のために抽出できます。
このアプローチは、Expat Parserを使用するときのロギング、フィルタリング、コンテンツ抽出などのコメントのカスタマイズに特に適しています。