未处理的异常:System.Xml.XPath.XPathException:表达式必须评估节点集

时间:2010-11-13 09:46:30

标签: c# .net xpath

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

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

2 个答案:

答案 0 :(得分:4)

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

//*[@id='something']

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

编辑:如果您想要id属性节点本身而不是其父元素,则可以使用:

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

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

//@id[. = 'something']

答案 1 :(得分:0)

  

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

     

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

这个表达的很多问题:

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

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

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

<强>解决方案

//*[@id='something']

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

//@id[. = 'something']

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

//@*[. = 'something']

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