Java 计算Xpath时出现InputStream异常

Java 计算Xpath时出现InputStream异常,java,xml,exception,xpath,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.j

我得到:
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
对象计算Xpath表达式时,我尝试对其进行调试,但没有发现任何错误(当然,我遗漏了一些东西..)。代码如下:

从Main:

    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
}
辅助方法
节点输入流

/*
 *    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倍

Well
m.evaluate(q,null,XPathConstants.NODESET)
向evaluate方法传递一个空引用,这样您就可以创建
新的DOMSource(null)
我认为这对我来说似乎没有意义,并且可能会导致以后在计算相对XPath
inventory/book/chapter[3]/Previous sibling::chapter//title
时出现该错误。

我已经尝试使用了一个节点对象(这不是空值),它仍然会产生相同的结果。