2012-05-13 14 views
0

を評価しながら: javax.xml.transform.TransformerException: Unable to evaluate expression using this contextのInputStream例外私が手のXpath

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); 

私たちは、このevaluateメソッドを使用します。

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倍!あなたは私が私に意味をなすように思わないと思うし、おそらく相対XPathのinventory/book/chapter[3]/preceding-sibling::chapter//titleが評価された後にそのエラーになりnew DOMSource(null)を作成するよう

答えて

1

まあm.evaluate(q, null, XPathConstants.NODESET);は、評価方法にnull参照を渡します。

+0

私はNodeオブジェクト(NULLではない)を試しましたが、同じ結果が得られます。 – ron

関連する問題