当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《System.Xml.XPath.XPathException:执行SelectSingleNode时,表达式必须求值为一个节点集("//(artist|author)")》经验,为你挑选了1个好方法。

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

我正在执行

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查询(节点集)的结果.



1> froh42..:

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

    "//artist|//author"

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

更新:

我在规范中查了一下:

3.3节点集

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

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

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

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

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有