15

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

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

这总是引发:

XPathException:表达式必须计算为节点集。

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

4

3 回答 3

19

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

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

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

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

(bool)xmlDocument.CreateNavigator().Evaluate(String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName));
于 2008-10-01T11:24:40.417 回答
1

尝试:

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

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

编辑:愚蠢的错误

于 2008-10-01T10:52:19.543 回答
1

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

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

前面的表达式计算为布尔值,这解释了异常错误。谢谢您的帮助!

于 2008-10-01T11:13:11.177 回答