也许这不是一个真正的编程问题。但是…
为什么是org.w3c.dom。NodeList不是java.lang.Iterable接口的扩展?
这听起来太违反直觉了。特别是因为文档说:
NodeList接口提供了节点有序集合的抽象,但没有定义或约束该集合的实现方式。DOM中的NodeList对象是活动的。NodeList中的项可以通过从0开始的整型索引访问。
PS:请在适当的地方引用你的答案。
org.w3c.dom.NodeList
早于Iterable
,后者在Java 1.5版中引入。
可能是由于兼容性原因没有更新,但我没有参考资料。
w3c只定义规范(XML、XSLT、DOM等),并没有试图使API与任何特定的语言或平台保持一致。
它的目的是为解析器的开发人员提供一个指导方针,以生产与使用这些解析器的现有代码兼容的产品。
当你构建你的应用程序框架时,最好包装所有的API调用,这样你就可以控制如何在不同的语言或不同的平台上访问API。
在Java, JavaScript, c#或任何你使用的,创建一个类对象包装访问API调用。在JavaScript中,它将有助于使代码跨浏览器兼容,如果您针对多个平台发布解决方案,则只需更新包装器类。
下面是一个示例,但是,您可以随心所欲地定义自己的包装器接口和基类,并使用派生类重写来提供特定的实现。
function XMLNode(xnode) {
this.xnode = xnode;
}
function getNodes(path, xnode) {
if (browseTYPE != IE) {
//Ordered SnapShot
if (xnode.evaluate)
fld = xnode.evaluate(path, xnode, null, 7, null);
else
fld = xnode.ownerDocument.evaluate(path, xnode, null, 7, null);
//We need a result wrapper here
if (fld != null) return new XMLSnapShotList(fld);
} else {
fld = xnode.selectSingleNode(path).childNodes;
//We need a result wrapper here
if (fld != null) return new XMLList(fld);
}
return null;
}
XMLNode.prototype.getNodes = getNodes;