How to retrieve comments from within an XML Docume

2019-01-12 11:08发布

I want to extract all comments below a specific node within an XML document, using PHP. I have tried both the SimpleXML and DOMDocument methods, but I keep getting blank outputs. Is there a way to retrieve comments from within a document without having to resort to Regex?

4条回答
我想做一个坏孩纸
2楼-- · 2019-01-12 11:21

Use XMLReader. Comments can be easily detected/found, they are xml elements of type COMMENT. For details see PHP documentation: The XMLReader class

Code example:

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

And in array $comments you will have all comments found in XML file.

查看更多
Luminary・发光体
3楼-- · 2019-01-12 11:26

Do you have access to an XPath API ? XPath allows you to find comments using (e.g.)

//comment()
查看更多
Emotional °昔
4楼-- · 2019-01-12 11:34

If you are using a SAX event driven-parser, the parser should have an event for comments. For example, when using Expat you would implement a handler and set it using:

void XMLCALL
XML_SetCommentHandler(XML_Parser p,
                      XML_CommentHandler cmnt);
查看更多
在下西门庆
5楼-- · 2019-01-12 11:46

SimpleXML cannot handle comments, but the DOM extension can. Here's how you can extract all the comments. You just have to adapt the XPath expression to target the node you want.

$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);
}
查看更多
登录 后发表回答