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

kno*_*opx 4 c# xml xpath selectsinglenode

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

我正在执行

XmlNode xmlNode = xmlDocument.SelectSingleNode("//(artist|author)");
Run Code Online (Sandbox Code Playgroud)

我明白了

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

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

XmlNode xmlNode = xmlDocument.SelectSingleNode("//artist");
Run Code Online (Sandbox Code Playgroud)

fro*_*h42 8

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

    "//artist|//author"
Run Code Online (Sandbox Code Playgroud)

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

更新:

我在规范中查了一下:

3.3节点集

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

| operator计算其操作数的并集,该操作数必须是节点集.

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

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