2

PHPを使用して、XMLドキュメント内の特定のノードの下にあるすべてのコメントを抽出したいと思います。SimpleXMLメソッドとDOMDocumentメソッドの両方を試しましたが、空白の出力が表示され続けます。正規表現に頼らずにドキュメント内からコメントを取得する方法はありますか?

4

4 に答える 4

6

SimpleXMLはコメントを処理できませんが、DOM拡張機能は処理できます。すべてのコメントを抽出する方法は次のとおりです。必要なノードをターゲットにするようにXPath式を調整する必要があります。

$doc = new DOMDocument;
$doc->loadXML(
    '<doc>
        <node><!-- First node --></node>
        <node><!-- Second node --></node>
    </doc>'
);

$xpath = new DOMXPath($doc);

foreach ($xpath->query('//comment()') as $comment)
{
    var_dump($comment->textContent);
}
于 2010-01-01T00:17:35.140 に答える
2

XPath APIにアクセスできますか?XPathを使用すると、(例)を使用してコメントを検索できます。

//comment()
于 2009-12-31T19:29:25.347 に答える
1

XMLReaderを使用します。コメントは簡単に検出/検出できます。コメントはCOMMENTタイプのxml要素です。詳細については、PHPのドキュメントを参照してください:XMLReaderクラス

コード例:

$reader = new XMLReader();
$reader->open('filename.xml');
while ($reader->read()){
    if ($reader->nodeType == XMLReader::COMMENT) {
        $comments[] = $reader->readOuterXml();
    }
}

配列の$commentsには、すべてのコメントがXMLファイルに含まれています。

于 2018-01-21T01:09:46.043 に答える
0

SAXイベントドリブンパーサーを使用している場合、パーサーにはコメント用のイベントが必要です。たとえば、Expatを使用する場合は、ハンドラーを実装し、次を使用して設定します。

void XMLCALL
XML_SetCommentHandler(XML_Parser p,
                      XML_CommentHandler cmnt);
于 2009-12-31T19:26:06.833 に答える