【发布时间】:2015-12-10 17:26:34
【问题描述】:
我正在尝试比较两个 (org.jdom2.Document) xml 文档并将它们插入到我的 xpath 表达式中。
String xpathExpression = "//[fn:deep-equal("+testDocument+","+ expectedDocument+")]";
这不会编译。正确的语法是什么?
另外,我希望这个表达式返回一个布尔值。我应该使用
List<Text> textValues = xpath.evaluate(testDocument);
得到结果?
【问题讨论】:
-
w3.org/TR/xquery-operators/#func-deep-equal 返回一个布尔值并将两个序列作为其参数。而
deep-equals是 XPath 2.0 或更高版本,您是否将 JDOM 与 XPath 2.0 实现一起使用? -
正确的语法是简单的“deep-equal($x, $y)”。您的语法是错误的,因为(a)您希望答案是布尔值,而不是满足布尔值的某些节点集的某个子集,并且(b)如果您确实想要一个谓词来过滤节点集,那么之前的事情谓词必须是有效的表达式,而“//”本身不是有效的表达式。
-
@Michael Kay 我试过 String xpathExpression = String.format("deep-equal(%s,%s)",testDocument,expectedDocument);两个文档都已填充。我得到一个 XPathSyntaxException: Caused by: class org.jaxen.saxpath.XPathSyntaxException: deep-equal([Document: No DOCTYPE declaration, Root is [Element:
policy.model.com/]/>]],[Document: No DOCTYPE declaration, Root is [Element :policy.model.com/]/>]]):11:意外的 '[' -
Jim:你不能期望 document.toString() 的结果是你可以连接成 XPath 表达式的东西!无论如何,我认为 Jaxen 不支持 XPath 2.0。您需要使用 Saxon 或其他一些 XPath 2.0 引擎。你为什么不按照@MartinHonnen 的建议去做?
-
@Michael Kay 我只是先尝试你的建议。