java中带有javax.xml.xpath的标准xpath处理如下:我提供要处理的xml的名称我将xpath表达式作为字符串提供。我得到的答案存储为一个节点列表,或最终作为一个单一的值,这取决于我选择的输出类型。我需要用java编写几个测试,它们基本上应该是这样工作的:我将xpath表达式作为字符串提供,它检查这个表达式的xpath输出是否等于某个指定的输出(也作为字符串提供)。所以我不需要遍历节点树之类的东西,我只需要获得一个字符串形式的xpath处理器输出。有什么办法吗?
yws3nbqq1#
如果你使用
xPathExpression.evaluate(document);
哪里 document 是您的dom文档,则它将返回它匹配的第一个节点的字符串表示形式。对于您认为xpath选择单个文本节点的用例来说,这可能很好。如果不是这样,你可以写一些 toString() 方法 NodeList 返回自:
document
toString()
NodeList
xPathExpression.evaluate(document, XPathConstants.NODESET);
编辑1:这里有一篇关于转换 NodeList 并打印它。编辑2:如果您有使用 count 或返回单个值的逻辑运算符,则可以捕获引发的异常并采取适当的操作:
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); }
3pvhb19x2#
XPath.evaluate(expression, inputSource) 似乎做了你想做的事。编辑:下面是一些示例代码:
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
2条答案
按热度按时间yws3nbqq1#
如果你使用
哪里
document
是您的dom文档,则它将返回它匹配的第一个节点的字符串表示形式。对于您认为xpath选择单个文本节点的用例来说,这可能很好。如果不是这样,你可以写一些toString()
方法NodeList
返回自:编辑1:这里有一篇关于转换
NodeList
并打印它。编辑2:如果您有使用
count
或返回单个值的逻辑运算符,则可以捕获引发的异常并采取适当的操作:3pvhb19x2#
XPath.evaluate(expression, inputSource)
似乎做了你想做的事。编辑:下面是一些示例代码:
编辑:这个问题表明没有javaapi可以立即用于实现您的目标。如果您正在测试xml,那么您可能需要看看xmlunit