在检查节点是否存在时,如何解决错误"表达式必须评估到节点集"?

Ale*_*gas 12 .net xml xpath

我正在尝试使用以下.NET代码检查节点是否存在:

xmlDocument.SelectSingleNode(
        String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName));
Run Code Online (Sandbox Code Playgroud)

这总是提出:

XPathException:Expression必须求值为一个节点集.

为什么我会收到此错误,如何解决?谢谢.

TTo*_*oni 19

给定的表达式求值为布尔值,而不是节点集.我假设您要检查ProjectName是否等于参数化文本.在这种情况下,你需要写

//ErrorTable/ProjectName[text()='{0}']
Run Code Online (Sandbox Code Playgroud)

这将为您提供与给定条件匹配的所有节点(节点集)的列表.此列表可能为空,在这种情况下,示例中的C#-Expression将返回null.

作为事后的想法:你可以使用原始的xpath表达式,但不能使用SelectSingleNode,而是使用Evaluate,如下所示:

(bool)xmlDocument.CreateNavigator().Evaluate(String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName));
Run Code Online (Sandbox Code Playgroud)