System.Xml.XPath.XPathException:执行SelectSingleNode时,表达式必须求值为一个节点集(“//(artist | author)”)

时间:2009-03-10 16:42:23

标签: c# xml xpath selectsinglenode

有人可以解释一下,为什么这不起作用?

我正在执行

XmlNode xmlNode = xmlDocument.SelectSingleNode("//(artist|author)");

我得到了

System.Xml.XPath.XPathException: Expression must evaluate to a node-set.

但这有效,即使有很多艺术家节点

也不会引发异常
XmlNode xmlNode = xmlDocument.SelectSingleNode("//artist");

2 个答案:

答案 0 :(得分:8)

据我所知,你可以使用'|'只是在XPath查询的顶层,所以尝试查询

    "//artist|//author"

进行递归搜索(//)的方式并不是很快,因此请确保您的dom文档很小。

更新

我在specification

中查找了它
  

3.3节点集

     

位置路径可以用作   表达。表达式返回   路径选择的节点集。

     

|运算符计算联合   它的操作数,必须是节点集。

这意味着无论你在“|”左右写什么需要单独用作xpath查询,“|”然后从它创建联合。

具体来说,你不能说“以递归方式搜索(称为作者或称为艺术家的东西)”,因为“称为作者的东西”不会评估为xpath查询(节点集)的结果。

答案 1 :(得分:0)

  1. //artist|//author适用于XPATH 1.0和2.0
  2. //(artist|author)适用于XPATH 2.0
  3. 微软是一家懒惰的公司。他们的框架只支持XPATH 1.0