编程语言
首页 > 编程语言> > c# – System.Xml.XPath.XPathException:执行SelectSingleNode(“//(artist | author)”时,Expression必须求值为一个节点集

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

作者:互联网

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

我正在执行

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

我明白了

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

但这有效,即使有很多艺术家节点也不会引发异常

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

解决方法:

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

    "//artist|//author"

再做一次递归搜索(//)的方式不是很快,所以要确保你的dom文档很小.

更新:

我在specification中查了一下:

3.3 Node-sets

A location path can be used as an
expression. The expression returns the
set of nodes selected by the path.

The | operator computes the union of
its operands, which must be node-sets.

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

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

标签:c,xml,xpath,selectsinglenode
来源: https://codeday.me/bug/20190527/1160886.html