如何使用XPath访问XML文档中的注释?使用XPath访问XML中的注释
例如:
<table>
<length> 12 </length>
<!--Some comment here-->
</table>
我想 “这里有些评论” 访问。
谢谢...
编辑:我使用MSXML DOM ActiveX和命令评论()似乎是失败......任何想法,为什么?
如何使用XPath访问XML文档中的注释?使用XPath访问XML中的注释
例如:
<table>
<length> 12 </length>
<!--Some comment here-->
</table>
我想 “这里有些评论” 访问。
谢谢...
编辑:我使用MSXML DOM ActiveX和命令评论()似乎是失败......任何想法,为什么?
随着路径
/foo/bar/comment()
您可以选择在/富/酒吧元素的所有意见。当然,可能取决于你选择的语言。但通常这是你如何做到的。例如
使用注释()函数: -
/table/length/following::comment()[1]
选择下面的长度元件的第一评论。
编辑
马诺在问这个答案为什么这不是在MSXML工作的评论。原因将是你使用的是MSXML3。默认情况下,MSXML3不使用XPath作为其选择语言,它默认使用较早的较弱语言(XSL模式)。您需要通过DOMDocument的setProperty方法将XPath设置为选择语言。 E.g(在JScript): -
var dom = new ActiveXObject("MSXML2.DOMDocument.3.0");
dom.setProperty("SelectionLanguage", "XPath");
现在全XPath语言会在你的查询工作(注意一个重大更改是索引谓词是基于XPath中1,而他们基于XSL模式为0)。
也许这coud帮助, 此示例删除评论
XmlNodeList list = xmlDoc.SelectNodes("//comment()");
foreach(XmlNode node in list)
node.ParentNode.RemoveChild(node);
从这里link text
基于业务方案的意见,发布答案(和我的好奇,为什么这个简单的东西是行不通的凑近),这里是我的建议:
使用@Anthony建议的XPath表达式,我能够使用以下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版本可能会有所不同。请适当使用。
b。绝对不推荐这种代码,因为它只适用于IE。但是,由于这是你明确声明的要求,所以我使用了ActiveXObject。
c。您在评论中没有提到在建议的XPath表达式中失败的内容。我的猜测是,您不查询检索节点的text
属性。请记住,SelectSingleNode始终返回IXmlNode
,您需要查询其data
或text
属性。
我正在使用MSXML DOM ActiveX,并且此命令似乎失败了......任何想法为什么? – Manoj 2009-04-24 07:11:02
不,我不知道为什么。从上次使用MSXML库开始已经过去7年了... – 2009-04-24 07:28:26
确定您的xpath根目录是否正常?尝试“//评论()”以确保。 – annakata 2009-04-24 07:56:48