首页 > 编程语言> > 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