を評価しながら: 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)
を作成するよう
私はNodeオブジェクト(NULLではない)を試しましたが、同じ結果が得られます。 – ron