使用XPath访问XML中的注释
如何使用XPath访问XML文档中的注释?
例如:
<table> <length> 12 </length> <!--Some comment here--> </table>
我想访问“在这里的一些评论”。
谢谢…
编辑:我使用MSXML的DOM ActiveX和命令评论()似乎是失败…任何想法,为什么?
随着path
/foo/bar/comment()
您可以select/ foo / bar元素中的所有注释。 当然可以取决于你select的语言。 但通常这是你如何做到的。
使用comment()函数举例:
/table/length/following::comment()[1]
select长度元素后面的第一个注释。
编辑
Manoj在这个答案的评论中问为什么这不是在MSXML中工作。 原因将是你正在使用MSXML3。 默认情况下,MSXML3不使用XPath作为其select语言,它默认使用较早的较弱的语言(XSL模式)。 您需要通过DOMDocument的setProperty方法将XPath设置为select语言。 例如(在JScript中): –
var dom = new ActiveXObject("MSXML2.DOMDocument.3.0"); dom.setProperty("SelectionLanguage", "XPath");
现在,完整的XPath语言将在您的查询中工作(请注意,一个重大变化是索引器谓词是基于XPath的,而基于XSL模式的则是0)。
根据OP的评论发布的答案(和我的好奇心,为什么这个简单的东西不行),这里是我的build议:
使用@Anthonybuild议的XPathexpression式,我可以用下面的JS函数成功加载注释节点:
function SelectComment(s) { var xDoc = new ActiveXObject("MSXML2.DOMDocument.6.0"); if (xDoc) { xDoc.loadXML(s); var selNode = xDoc.selectSingleNode("/table/length/following::comment()[1]"); if (selNode != null) return selNode.text; else return ""; } }
示例调用:
SelectComment("<table><length> 12</length><!--Some comment here--></table>");
输出:
"Some comment here"
笔记:
一个。 您的MSXML版本可能会有所不同。 请适当使用。
湾 这种代码是绝对不推荐,因为它只适用于IE。 但是,由于这是您明确规定的要求,所以我使用了ActiveXObject。
C。 您在注释中没有提到在build议的XPathexpression式中失败的内容。 我的猜测是,你没有查询检索节点的text
属性。 请记住,SelectSingleNode总是返回一个IXmlNode
并且您需要查询其data
或text
属性。
也许这个coud帮助,这个示例删除评论
XmlNodeList list = xmlDoc.SelectNodes("//comment()"); foreach(XmlNode node in list) node.ParentNode.RemoveChild(node);
从这里链接链接文本