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

StackOverflow https://stackoverflow.com/questions/157044

  •  03-07-2019
  •  | 
  •  

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

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

总是提出:

  

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

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

有帮助吗?

解决方案

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

//ErrorTable/ProjectName[text()='{0}']

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

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

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

其他提示

尝试:

Node node = xmlDocument.SelectSingleNode(String.Format("//ErrorTable/ProjectName = '{0}'", projectName));

if (node != null) {
    // and so on
}

编辑:愚蠢的错误

XPath表达式包含一个微妙的错误。应该是:

xmlDocument.SelectSingleNode(String.Format("//ErrorTable/ProjectName[text()='{0}']", projectName));

前一个表达式正在评估一个布尔值,它解释了异常错误。谢谢你的帮助!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top