我有以下代码:
// 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);
这是结果...
net.sf.saxon.tinytree.TinyElementImpl类 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
这怎么可能呢?根据Sun的Java 1.5API,NODE和NODESET应该分别映射到org.w3c.dom.Node
和org.w3c.dom.NodeList
仅作澄清2是的,我知道Node是一个接口,getClass()返回一个具体的类。