我需要在不事先知道其返回值的情况下评估xpath表达式。我不关心Node和NodeSet之间的区别,但我确实关心NodeSet与String或数字。
例如,带有sum
或concat
函数的xpath可以返回数字或字符串(或布尔值)。具有常规xml路径的xpath返回一个节点集,可能只有一个节点。
如何调用XPathExpression.evaluate()
函数(javadoc here)?我不知道将QName作为第二个参数传递给它。类XPathConstants
包含允许的常量的闭合列表(这些是Node,NodeSet,String,Number和Boolean)。
是否可以指定“全部”或“不关心”值,然后检查返回的对象的类型?
我想也许可以使用这个函数的重载版本,它总是返回一个String。但是,如果xpath表达式用于返回节点集,我不知道这将如何工作。
答案 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等方法收到的东西。代码变得清晰:它说明了你想要的东西,所以很容易理解。