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 回答