Tôi có đoạn mã sau:Saxon XPath API trả về TinyElementImpl thay vì 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);
và đây là kết quả ...
class net.sf.saxon.tinytree.TinyElementImpl class java.util.ArrayList false false
Chỉ cần làm rõ , nếu tôi làm điều này:
org.w3c.dom.Node node = (org.w3c.dom.Node)evaluate;
hoặc
org.w3c.dom.NodeList node = (org.w3c.dom.NodeList)evaluate2;
tôi nhận được một ClassCastException
Làm thế nào mà có thể được? theo Suns Java 1.5 API NODE và nodeset nên bản đồ để org.w3c.dom.Node
và org.w3c.dom.NodeList
tương ứng
Chỉ cần clarify2 vâng tôi biết Node là một iterface, mà getClass() trả về một lớp bê tông.
Làm cho tinh thần .... nếu bạn đặt W3C DOM vào, bạn sẽ nhận được W3C DOM. Nếu không, bạn sẽ có được DOM độc quyền. – skaffman
Chào mừng bạn đến với Java XML. – Esko