XPath处理器输出为字符串

时间:2012-08-24 12:38:55

标签: java xpath

使用javax.xml.xpath的java中的标准XPath处理如下所示:

  1. 我提供了要处理的xml的名称
  2. 我提供xpath表达式作为字符串。
  3. 我获得的答案存储为节点列表,或最终作为单个值,具体取决于我选择的输出类型。
  4. 我需要在java中编写几个测试,基本上应该像这样工作: 我提供xpath表达式作为字符串,它检查此表达式的xpath输出是否等于某个指定的输出(也作为字符串提供)。所以我不需要遍历节点树和东西,我只需要获得xpath处理器输出作为字符串。有没有办法做到这一点?

2 个答案:

答案 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);
}