我们希望通过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
函数不起作用?
答案 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)");