计算简单 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
方法,而它期望 NodeInfo
、DOM
、Document
等之一
还要感谢@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);
您好,我在尝试编写测试时遇到了 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
方法,而它期望 NodeInfo
、DOM
、Document
等之一
还要感谢@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);