从XPath表达式返回一个布尔值

时间:2009-12-11 10:12:34

标签: .net xpath

我们希望通过XPath表达式实现对元素的存在检查。 XPath表达式是在外部定义的。我们正在尝试使用System.Xml.XPath中的XPathEvaluate扩展方法,但是当我们尝试执行以下操作时它会抱怨。

XDocument d = new XDocument(
                new XElement("test", 
                    new XElement("element"),
                    new XElement("element")));
bool b = (bool)d.XPathEvaluate("/test/element[exists()]");

此函数当前失败,并出现“需要命名空间管理器或XsltContext。此查询具有前缀,变量或用户定义的函数。”。如果我们尝试exists(/test/element),我们会收到相同的消息。

我们想在XPath表达式中表达的其他一件事是元素的数量,例如: count(/text/element) = 2

测试条件应该是XPath表达式的一部分。

函数调用d.XPathEvaluate("/test/element[last()]")按预期进行评估。

这种方式可以使用XPathEvaluate吗?

[编辑] 是。

如果没有,.Net框架中是否有其他选择?

[编辑] 是。

[编辑] 剩下的问题:为什么exists函数不起作用?

3 个答案:

答案 0 :(得分:5)

您是否尝试过XPath:

boolean(/test/element)

答案 1 :(得分:2)

经过一些更多的实验,似乎我回答了自己的问题。

当然,您可以将count(/test/element) > 0作为存在检查。 (而我们正在和三个人一起看这个:-()

bool b = (bool)d.XPathEvaluate("count(/test/element) > 0");

答案 2 :(得分:0)

  

剩下的问题:为什么不呢   存在功能工作?

您正在错误地调用exists()函数。的 The exists() function needs at least one argument.

不要在谓词中使用它来表示XPATH表达式,而是使用XPATH表达式作为 exists()函数的参数

bool b = (bool)d.XPathEvaluate("exists(/test/element)");