.net 从XPath表达式返回布尔值

.net 从XPath表达式返回布尔值,.net,xpath,.net,Xpath,我们希望通过XPath表达式实现元素的存在性检查。XPath表达式是在外部定义的。我们试图使用System.Xml.XPath中的xpatheevaluate扩展方法,但当我们尝试执行以下操作时,它会出现问题 XDocument d = new XDocument( new XElement("test", new XElement("element"), new XElement(

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

XDocument d = new XDocument(
                new XElement("test", 
                    new XElement("element"),
                    new XElement("element")));
bool b = (bool)d.XPathEvaluate("/test/element[exists()]");
此函数当前失败,出现异常“需要命名空间管理器或XsltContext。此查询具有前缀、变量或用户定义函数。”。如果我们尝试
存在(/test/element)
,我们会得到相同的消息

我们希望在XPath表达式中表达的另一件事情是元素的数量,例如
count(/text/element)=2

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

函数调用
d.xpatheevaluate(“/test/element[last()]”)
的计算结果与预期一致

是否可以这样使用
xpatheevaluate

[编辑] 对

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

[编辑] 对

[编辑]
剩下的问题:为什么
函数不存在?

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

当然,您可以执行
count(/test/element)>0
作为现有检查。(我们和三个人一起看这个:-()


您是否尝试过XPath:

boolean(/test/element)
剩下的问题:为什么 存在功能工作吗

您错误地调用了exists()函数。

与其在XPATH表达式的谓词中使用它,不如将XPATH表达式用作exists()函数的参数

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

我们已经尝试了同样的结果,这在我的问题中已经提到了。
bool b = (bool)d.XPathEvaluate("exists(/test/element)");