2011-08-10 71 views
4

有没有方法可以确定XPath评估的返回类型是什么?我希望XPath尽可能一致地匹配。它应该匹配一个节点列表,如果不能,节点,如果不能,一个值。有没有简单的方法来在Java中实现这一点?Java XPath评估返回类型

回答

2

JAXP XPath API的设计有很多困难,这就是其中之一。考虑使用Saxon作为XPath处理器,它将(a)使您能够使用XPath 2.0,并且(b)为您提供更丰富的s9api API的好处。 [无耻插头]

1

您应该知道评估的返回类型,因为您已将其提供给evaluate。例如:

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

如果你正在处理,你没有执行自己的评估结果(即你刚刚被交给一些Object),然后再打到正常instanceof检查。

+0

我希望找到一种方法来调用它,而不知道返回类型,并获得最广泛的。 – Arash

1

不能使用标准的JAXP实现,但可以使用Jaxen。它有一个selectNodes()函数,它返回一个List对象。该列表将包含AttributeContent或文本(也许还有其他我还没有遇到)。您需要将它传递给一个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(); 
    } 
}