我正在尝试使用以下 .NET 代码检查节点是否存在:
xmlDocument.SelectSingleNode(
String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName));
这总是引发:
XPathException:表达式必须计算为节点集。
为什么我会收到此错误,我该如何解决?谢谢你。
给定的表达式计算为布尔值,而不是节点集。我假设您想检查 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));
前面的表达式计算为布尔值,这解释了异常错误。谢谢您的帮助!