Java XPath评估返回类型

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

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

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

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

如果您正在处理自己没有执行的评估结果(即您刚刚交给某个Object ),那么请使用正常的检查instanceof

你不能使用标准的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(); } }