从XPath表达式返回布尔值
我们想通过XPath表达式实现对元素的存在检查。 XPath表达式是在外部定义的。我们尝试使用System.Xml.XPath中的XPathEvaluate扩展方法,但是当我们尝试执行以下操作时,它会发出抱怨。从XPath表达式返回布尔值
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
函数不起作用?
经过一些更多的实验后,我似乎回答了我自己的问题。
当然你可以做count(/test/element) > 0
作为存在检查。 (我们在看这三个人:-()
bool b = (bool)d.XPathEvaluate("count(/test/element) > 0");
你有没有试过的XPath:
boolean(/test/element)
剩下的问题:为什么不 存在功能工作
您所呼叫的存在()函数不正确。The exists() function needs at least one argument.
而不是在一个谓词使用它为您的XPATH表达式,使用XPATH表达式作为存在()函数参数。
bool b = (bool)d.XPathEvaluate("exists(/test/element)");
我们已经尝试过,结果相同。这是在我的问题中提到的。 – 2009-12-13 12:56:45
不是之前,但只是测试它,它的工作原理。 – 2009-12-11 10:24:51