有没有办法从XML文件中检索注释?
我有一个XML文件,其中包含注释,我必须根据此文件中的每个节点以及相关的注释构建用户界面。
我似乎无法找到获得这些评论的方法。我能够使用simpleXML来获取它们中的一些,但它对根节点不起作用,并且表现得非常奇怪......一些注释被放在它们自己的节点中,另外一些被留下作为孩子,所有评论被放在同一个节点......不确定这有什么意义:)重点是simpleXML打破了评论的结构,这对我的需求并不好。
答案 0 :(得分:2)
您可以使用XMLReader读取所有节点并提取注释。我已经包含了一些示例代码来帮助您入门,因为它只是拉出节点,并没有考虑其中注释位于任何xml节点内部,下方或上方。
$comments = '';
$xml =<<<EOX
<xml>
<!--data here -->
<data>
<!-- more here -->
<more />
</data>
</xml>
EOX;
$reader = new XMLReader();
$reader->XML($xml);
while ($reader->read()) {
if ($reader->nodeType == XMLReader::COMMENT) {
$comments .= "\n".$reader->value;
}
}
$reader->close();
echo "all comments below:\n-------------------".$comments
预期输出为:
all comments below:
-------------------
data here
more here
因此,只会考虑评论的值(不是<!-- -->
),以及空格。
答案 1 :(得分:0)
simpleXml适合快速抓取某些东西,但它有局限性。请改用DOM解析器。或者在这种情况下,可能是基于事件的(SAX或XmlReader)。
答案 2 :(得分:0)
如果使用XPath,这很简单。 comment()
函数匹配注释。所以模式
//comment()
查找文档中的所有注释。
在XSLT中,对于注释位于要转换的元素之前的一般模式,例如:
<!-- This is the comment -->
<element>...
您使用的模板如下:
<xsl:template match="*[.::preceding-sibling()/comment()]">
<xsl:variable name="comment" select=".::preceding-sibling()/comment()"/>
<!-- xsl:value-of $comment will now give you the text of the comment -->
...