Java XPath评估返回类型

4

有没有办法确定XPath评估的返回类型是什么?我希望XPath能够尽可能通用地匹配。它应该匹配一个节点列表,如果不能,则匹配一个节点,如果还是不行,则匹配一个值。在Java中是否有一种简单的实现方式?

3个回答

2

JAXP XPath API 的设计存在许多困难,这是其中之一。考虑使用 Saxon 作为您的 XPath 处理器,它将 (a) 让您能够使用 XPath 2.0,并且 (b) 获得更丰富的 s9api API 好处。[自我推荐]


1

使用标准的JAXP实现无法做到这一点,但是您可以使用Jaxen。它有一个selectNodes()函数,返回一个对象列表。该列表将包含AttributeContent或Text(也许还有其他我尚未遇到的类型)。您需要向其传递一个JDom文档。

org.jdom.Document doc = builder.build(file);
org.jdom.xpath.XPath xp = XPath.newInstance("expression here");
List nodes = xpath.selectNodes(document);
for (Object node : nodes) {
   if (node instanceof Attribute) {
     value = ((Attribute) node).getValue();
   } else if (node instanceof Content) {
     value = ((Content) node).getValue();
   } else if (node instanceof Text) {
     value = (Text) node.getText();
   }
}

1

你应该知道评估的返回类型,因为你已经提供给了evaluate函数。例如:

XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile("/expression");
NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

如果你正在处理一个你自己没有执行的评估结果(即你只是被交给了一些Object),那么请使用普通的instanceof检查。


我希望找到一种方法,在不知道返回类型和获取最广泛的情况下调用它。 - Arash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接