使用javax.xml.xpath的java中的标准XPath处理如下所示:
我需要在java中编写几个测试,基本上应该像这样工作: 我提供xpath表达式作为字符串,它检查此表达式的xpath输出是否等于某个指定的输出(也作为字符串提供)。所以我不需要遍历节点树和东西,我只需要获得xpath处理器输出作为字符串。有没有办法做到这一点?
答案 0 :(得分:0)
XPath.evaluate(expression, inputSource)
似乎做你想做的事。
编辑:以下是一些示例代码:
String xml = "<foo><bar>text</bar></foo>";
Reader reader = new StringReader(xml);
InputSource inputSource = new InputSource(reader);
XPath xpath = XPathFactory.newInstance().newXPath();
System.out.println(xpath.evaluate("/foo/bar", inputSource));
编辑:this question表示没有可以立即用于实现目标的java api。如果您正在测试XML,那么您可能需要查看XmlUnit
答案 1 :(得分:0)
如果您使用
xPathExpression.evaluate(document);
其中document
是您的DOM文档,然后它将返回它匹配的第一个节点的字符串表示形式。对于您认为XPath正在选择单个文本节点的用例,这可能很好。如果情况并非如此,您可以为toString()
编写一些NodeList
方法,该方法从以下位置返回:
xPathExpression.evaluate(document, XPathConstants.NODESET);
编辑1:这是一篇关于将NodeList
转换为XML文档并进行打印的SO文章。
编辑2:如果你有使用count
的XPath表达式或返回单个值的逻辑运算符,那么你可以捕获抛出的异常并采取适当的行动:
try {
NodeList nodeList = (NodeList) xPathExpression.evaluate(document, XPathConstants.NODESET);
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
System.out.println(node.getNodeName());
}
} catch (XPathExpressionException e) {
String result = xPathExpression.evaluate(document);
System.out.println(result);
}