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