Ho il seguente codice:Saxon XPath API restituisce TinyElementImpl invece di 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);
e questo è il risultato ...
class net.sf.saxon.tinytree.TinyElementImpl class java.util.ArrayList false false
Giusto per chiarire , se faccio questo:
org.w3c.dom.Node node = (org.w3c.dom.Node)evaluate;
o
org.w3c.dom.NodeList node = (org.w3c.dom.NodeList)evaluate2;
ottengo un ClassCastException
Come può essere? secondo i Suns Java 1.5 API NODE e serie di nodi dovrebbero mappare org.w3c.dom.Node
e org.w3c.dom.NodeList
rispettivamente
Solo per clarify2 Sì, lo so nodo è un iterface, che getClass() restituisce una classe concreta.
Ha senso .... se inserisci il DOM W3C, ottieni il W3C DOM. Altrimenti, ottieni il DOM proprietario. – skaffman
Benvenuti in Java XML. – Esko