有人可以解释一下,为什么这不起作用?
我正在执行
XmlNode xmlNode = xmlDocument.SelectSingleNode("//(artist|author)");
我得到了
System.Xml.XPath.XPathException: Expression must evaluate to a node-set.
但这有效,即使有很多艺术家节点
也不会引发异常XmlNode xmlNode = xmlDocument.SelectSingleNode("//artist");
答案 0 :(得分:8)
据我所知,你可以使用'|'只是在XPath查询的顶层,所以尝试查询
"//artist|//author"
进行递归搜索(//)的方式并不是很快,因此请确保您的dom文档很小。
更新
中查找了它3.3节点集
位置路径可以用作 表达。表达式返回 路径选择的节点集。
|运算符计算联合 它的操作数,必须是节点集。
这意味着无论你在“|”左右写什么需要单独用作xpath查询,“|”然后从它创建联合。
具体来说,你不能说“以递归方式搜索(称为作者或称为艺术家的东西)”,因为“称为作者的东西”不会评估为xpath查询(节点集)的结果。
答案 1 :(得分:0)
//artist|//author
适用于XPATH 1.0和2.0 //(artist|author)
适用于XPATH 2.0 微软是一家懒惰的公司。他们的框架只支持XPATH 1.0