java - 评估 Xpath 时的 InputStream 异常

标签 java xml exception xpath

我得到: javax.xml.transform.TransformerException:无法使用此上下文计算表达式

    at com.sun.org.apache.xpath.internal.XPath.execute(Unknown Source)
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.eval(Unknown Source)
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(Unknown Source)
    at XPathImplementation.evaluate(XPathImplementation.java:136)
    at Main.main(Main.java:23)
Caused by: java.lang.RuntimeException: Unable to evaluate expression using this context
    at com.sun.org.apache.xpath.internal.axes.NodeSequence.setRoot(Unknown Source)
    at com.sun.org.apache.xpath.internal.axes.LocPathIterator.execute(Unknown Source)

在尝试使用 InputStream object 计算 Xpath 表达式时,我尝试对其进行调试,但没有发现任何错误(当然我错过了一些东西..)。代码如下:

来自主要:

    XPathProject m = new XPathImplementation();
    m.loadXML("books.xml"); 
    String q = "inventory/book/chapter[3]/preceding-sibling::chapter//title";
    Object ob = m.evaluate(q, null, XPathConstants.NODESET);

我们使用这个评估方法:

public Object evaluate(String expression, Node source, QName returnType) throws XPathExpressionException,IllegalArgumentException,NullPointerException, TransformerException
{
...
  InputStream  is = nodeToInputStream(source);
  Object returnedObject= xpath.evaluate(expression, is, returnType); // it happens here !!

... more code
}

辅助方法nodeToInputStream:

/*
 *    Convert Node object into InputStream object
 */

    private InputStream nodeToInputStream(Node node) throws TransformerException {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        StreamResult outputTarget = new StreamResult(outputStream);
        Transformer t = TransformerFactory.newInstance().newTransformer();
        t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
        t.transform(new DOMSource(node), outputTarget);
        return new ByteArrayInputStream(outputStream.toByteArray());
}

知道我哪里出错了吗? 10 倍!

最佳答案

好吧m.evaluate(q, null, XPathConstants.NODESET);传入对评估方法的空引用,以便您创建 new DOMSource(null)我认为这对我来说似乎没有意义,并且可能会导致稍后出现该错误,其中相对 XPath inventory/book/chapter[3]/preceding-sibling::chapter//title已评估。

关于java - 评估 Xpath 时的 InputStream 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10572090/

相关文章:

java - 如何使用 stax 检测 java 中的 xml 数组?

java - 异常:缺少manifest.properties

android - TextView 未出现在模拟器和真实设备上

java - 在数据库中,一列的值为 "0.000000000000"。如何将 "0.000000000000"整体打印出来?

java - 使用 Java 反射的动态转换

java - 在MapReduceBase中的configure方法中初始化多输出实例

java - 向依赖于 XSD 信息的 JAXB 生成的类添加注释

python - 将 print 语句添加到 ValueError 异常

php - 有没有办法在不必创建变量的情况下捕获异常?

java - 查找整数数组中的最大数字