我想使用PHP提取XML文档中特定节点下的所有注释。我已经尝试过SimpleXML和DOMDocument方法,但我一直在输出空白。有没有办法从文档中检索注释而不必使用正则表达式?
答案 0 :(得分:5)
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);
}
答案 1 :(得分:2)
您是否可以访问XPath API? XPath允许您使用(例如)
查找注释//comment()
答案 2 :(得分:0)
如果您使用的是SAX事件驱动解析器,则解析器应该有一个注释事件。例如,使用Expat时,您将实现一个处理程序并使用以下命令设置它:
void XMLCALL
XML_SetCommentHandler(XML_Parser p,
XML_CommentHandler cmnt);
答案 3 :(得分:0)
使用XMLReader。可以轻松检测/找到注释,它们是COMMENT类型的xml元素。 有关详细信息,请参阅PHP documentation: The XMLReader class
代码示例:
$reader = new XMLReader();
$reader->open('filename.xml');
while ($reader->read()){
if ($reader->nodeType == XMLReader::COMMENT) {
$comments[] = $reader->readOuterXml();
}
}
在数组$注释中,您将在XML文件中找到所有注释。