计算简单 XPath 表达式时出现异常

Exception while evaluating simple XPath expression

您好,我在尝试编写测试时遇到了 XPath 表达式的问题。 我有以下代码片段。

final String resultCode = xPath.compile(
        "//*:Envelope/*:Body/ResultCode/text()")
        .evaluate(responseEntity.getBody());

responseEntity 是由我的模拟返回的。它由 HttpStatus 和 xml 格式的适当响应主体组成。在执行测试时我得到这个异常

Caused by: javax.xml.xpath.XPathExpressionException: Cannot locate an object model implementation for nodes of class java.lang.String at net.sf.saxon.xpath.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:321) at net.sf.saxon.xpath.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:396) ...

我正在使用 saxon 来完成这项任务,但老实说我对它不是很熟悉。欢迎提出任何要检查的建议

好的,我明白了。不幸的是,当您必须在您完全不了解的领域中修复某人的代码时,就会发生这种情况。

问题是一个字符串被传递给了 evaluate 方法,而它期望 NodeInfoDOMDocument 等之一

还要感谢@paul trmbrth 修复了格式错误的 xpath 表达式。

我把代码改成了这样:

InputSource source = new InputSource(new StringReader(responseEntity.getBody()));
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
final Document document = db.parse(source);

final String resultCode = xPath.compile(
        "//*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ResultCode']/text()")
        .evaluate(document);