有人可以解释一下,为什么这不起作用?
我正在执行
XmlNode xmlNode = xmlDocument.SelectSingleNode("//(artist|author)");
我明白了
System.Xml.XPath.XPathException: Expression must evaluate to a node-set.
但这有效,即使有很多艺术家节点也不会引发异常
XmlNode xmlNode = xmlDocument.SelectSingleNode("//artist");
froh42.. 8
据我所知,你可以使用'|' 只是在XPath查询的顶层,所以尝试查询
"//artist|//author"
再做一次递归搜索(//)的方式不是很快,所以要确保你的dom文档很小.
更新:
我在规范中查了一下:
3.3节点集
位置路径可以用作表达式.表达式返回路径选择的节点集.
| operator计算其操作数的并集,该操作数必须是节点集.
这意味着无论你左右写什么"|" 需要单独用作xpath查询,"|" 然后从它创建联合.
具体来说,你不能说"递归搜索(称为作者或称为艺术家的东西)",因为"称为作者的东西"不会评估xpath查询(节点集)的结果.
据我所知,你可以使用'|' 只是在XPath查询的顶层,所以尝试查询
"//artist|//author"
再做一次递归搜索(//)的方式不是很快,所以要确保你的dom文档很小.
更新:
我在规范中查了一下:
3.3节点集
位置路径可以用作表达式.表达式返回路径选择的节点集.
| operator计算其操作数的并集,该操作数必须是节点集.
这意味着无论你左右写什么"|" 需要单独用作xpath查询,"|" 然后从它创建联合.
具体来说,你不能说"递归搜索(称为作者或称为艺术家的东西)",因为"称为作者的东西"不会评估xpath查询(节点集)的结果.