У меня есть следующий код:Saxon XPath API возвращает TinyElementImpl вместо org.w3c.dom.Node
// xpath evaluates to net.sf.saxon.xpath.XPathEvaluator
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expression = xpath.compile("/foo/bar");
Object evaluate = expression.evaluate(someXML, XPathConstants.NODE);
Object evaluate2 = expression.evaluate(someXML, XPathConstants.NODESET);
System.out.println(evaluate!=null?evaluate.getClass():"null");
System.out.println(evaluate2!=null?evaluate2.getClass():"null2");
System.out.println(evaluate instanceof Node);
System.out.println(evaluate2 instanceof NodeList);
и это результат ...
class net.sf.saxon.tinytree.TinyElementImpl class java.util.ArrayList false false
Просто чтобы прояснить , если я делаю это:
org.w3c.dom.Node node = (org.w3c.dom.Node)evaluate;
или
org.w3c.dom.NodeList node = (org.w3c.dom.NodeList)evaluate2;
Я получаю ClassCastException
Как это может быть? согласно Suns Java 1.5 API NODE и NodeSet следует сопоставить org.w3c.dom.Node
и org.w3c.dom.NodeList
соответственно
Просто clarify2 да я знаю, что узел является iterface, что GetClass() возвращает конкретный класс.
Делает смысл .... если вы положите W3C DOM внутрь, вы получите W3C DOM. В противном случае вы получаете проприетарный DOM. – skaffman
Добро пожаловать в Java XML. – Esko