xpath处理器输出为字符串

nom7f22z  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(462)

java中带有javax.xml.xpath的标准xpath处理如下:
我提供要处理的xml的名称
我将xpath表达式作为字符串提供。
我得到的答案存储为一个节点列表,或最终作为一个单一的值,这取决于我选择的输出类型。
我需要用java编写几个测试,它们基本上应该是这样工作的:我将xpath表达式作为字符串提供,它检查这个表达式的xpath输出是否等于某个指定的输出(也作为字符串提供)。所以我不需要遍历节点树之类的东西,我只需要获得一个字符串形式的xpath处理器输出。有什么办法吗?

yws3nbqq

yws3nbqq1#

如果你使用

xPathExpression.evaluate(document);

哪里 document 是您的dom文档,则它将返回它匹配的第一个节点的字符串表示形式。对于您认为xpath选择单个文本节点的用例来说,这可能很好。如果不是这样,你可以写一些 toString() 方法 NodeList 返回自:

xPathExpression.evaluate(document, XPathConstants.NODESET);

编辑1:这里有一篇关于转换 NodeList 并打印它。
编辑2:如果您有使用 count 或返回单个值的逻辑运算符,则可以捕获引发的异常并采取适当的操作:

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);
}
3pvhb19x

3pvhb19x2#

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));

编辑:这个问题表明没有javaapi可以立即用于实现您的目标。如果您正在测试xml,那么您可能需要看看xmlunit

相关问题