繁体   English   中英

未处理的异常:System.Xml.XPath.XPathException:Expression必须求值为node-set

[英]Unhandled Exception: System.Xml.XPath.XPathException: Expression must evaluate t o a node-set

我试图选择属性等于某事的所有节点,我在标题中得到了错误。

我的Xpath字符串看起来像//@[id=****] ,有谁知道什么是错的?

您的XPath表达式可能应该是:

//*[@id='something']

这意味着在文档中的任何位置匹配id属性等于something内容的所有元素

编辑:如果你想要id属性节点本身而不是他们的父元素,你可以使用:

//*[@id='something']/@id

甚至更好,正如@Dimitre Novatchev建议的那样:

//@id[. = 'something']

我试图选择属性等于某事的所有节点,我在标题中得到了错误。

我的Xpath字符串看起来像//@[id=****] ,有谁知道什么是错的?

这个表达式有很多问题:

0.1。 //@[some-condition]谓词只能应用于所选节点,但//@不会选择任何节点。 @attribute::的缩写,这是一个未完成的节点测试。 它在这里缺少节点类型或节点名称。

什么是正确的是: //@*[some-condition]//@attrName[some-condition]

0.2。 id=****在语法上是无效的,除非* *是一个有效的XPath表达式本身。 我的猜测是你想要获得所有属性值等于某个已知的文字值。 在任何这种情况下,要使用的语法是id='someLiteral - 请注意文字值周围的单引号(它们也可以是双引号)。

方案

//*[@id='something']

这将选择XML文档中具有值为'something'属性id所有元素。

//@id[. = 'something']

这将选择XML文档中名为id所有属性,其值为'something'

//@*[. = 'something']

这将选择XML文档中的所有属性(无论其名称如何),其值为'something'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM