XPathExpression动态返回值

时间:2011-04-05 14:48:11

标签: java xpath

我需要在不事先知道其返回值的情况下评估xpath表达式。我不关心Node和NodeSet之间的区别,但我确实关心NodeSet与String或数字。

例如,带有sumconcat函数的xpath可以返回数字或字符串(或布尔值)。具有常规xml路径的xpath返回一个节点集,可能只有一个节点。

如何调用XPathExpression.evaluate()函数(javadoc here)?我不知道将QName作为第二个参数传递给它。类XPathConstants包含允许的常量的闭合列表(这些是Node,NodeSet,String,Number和Boolean)。

是否可以指定“全部”或“不关心”值,然后检查返回的对象的类型?

我想也许可以使用这个函数的重载版本,它总是返回一个String。但是,如果xpath表达式用于返回节点集,我不知道这将如何工作。

2 个答案:

答案 0 :(得分:1)

在Alejandro提示DOM Level 3 XPath之后,我发现Xalan 2.7.1已经支持它了。

我使用了Xalan的类XPathEvaluatorImpl。它工作得很好,我可以指定ANY-TYPE作为返回值。唯一的缺点是标准javax api中没有公开此功能,至少在Java 6中没有公开。

答案 1 :(得分:0)

Re:获取String - 如果表达式引用NodeSet,则获得其文本表示。它可能像这样:

此的

根据配置读取为带有或不带有空格的字符串“thisthat”。没有尝试就不会知道。

我个人更喜欢Dom4J,因为你负责使用booleanValueOf,numberValueOf,selectNodes,selectSingleNode等方法收到的东西。代码变得清晰:它说明了你想要的东西,所以很容易理解。