Java XPath求值返回类型
有没有办法确定XPath计算的返回类型?我希望XPath尽可能通用地匹配。它应该匹配一个节点列表,如果不能,则匹配一个节点,如果不能,则匹配一个值。有没有一种简单的方法可以在Java中实现这一点?您应该知道求值的返回类型,因为您将它提供给了Java XPath求值返回类型,java,xml,xpath,Java,Xml,Xpath,有没有办法确定XPath计算的返回类型?我希望XPath尽可能通用地匹配。它应该匹配一个节点列表,如果不能,则匹配一个节点,如果不能,则匹配一个值。有没有一种简单的方法可以在Java中实现这一点?您应该知道求值的返回类型,因为您将它提供给了求值。例如: XPath xpath = XPathFactory.newInstance().newXPath(); XPathExpression expr = xpath.compile("/expression"); NodeList nodes =
求值
。例如:
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile("/expression");
NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
如果您处理的评估结果不是您自己执行的(即,您刚刚收到一些
对象
),那么请使用正常的实例进行检查。JAXP XPath API的设计有很多困难,这就是其中之一。考虑使用SAXON作为XPath处理器,它将(a)使您能够使用XPath 2,并且(b)给您更丰富的S9API API的好处。[无耻的插件]使用标准JAXP实现无法做到这一点,但可以使用。它有一个selectNodes()
函数,返回对象的列表。该列表将包含属性
、内容
或文本(可能还有我尚未遇到的其他内容)。您需要向其传递一个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();
}
}
我希望找到一种方法来调用它,而不知道返回类型并获得最广泛的结果。