使用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并且您需要查询其datatext属性。

也许这个coud帮助,这个示例删除评论

 XmlNodeList list = xmlDoc.SelectNodes("//comment()"); foreach(XmlNode node in list) node.ParentNode.RemoveChild(node); 

从这里链接链接文本