如何在 PHP 中从 XML 文档中检索注释

发布于 2024-08-16 03:57:50 字数 111 浏览 2 评论 0原文

我想使用 PHP 提取 XML 文档中特定节点下的所有注释。我已经尝试了 SimpleXML 和 DOMDocument 方法,但我一直得到空白输出。有没有一种方法可以从文档中检索注释而不必求助于正则表达式?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

梦在深巷 2024-08-23 03:57:50

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);
}

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);
}
陌上芳菲 2024-08-23 03:57:50

您有权访问 XPath API 吗? XPath 允许您使用(例如)查找评论

//comment()

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

//comment()
美胚控场 2024-08-23 03:57:50

使用 XMLReader。注释可以很容易地检测/找到,它们是 COMMENT 类型的 xml 元素。
有关详细信息,请参阅 PHP 文档:XMLReader 类

代码示例:

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

并在数组 $ 中注释 您将拥有 XML 文件中找到的所有注释。

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.

素手挽清风 2024-08-23 03:57:50

如果您使用 SAX 事件驱动解析器,解析器应该有一个注释事件。例如,当使用 Expat 时,您将实现一个处理程序并使用以下命令设置它:

void XMLCALL
XML_SetCommentHandler(XML_Parser p,
                      XML_CommentHandler cmnt);

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文