也许这不是一个编程问题。但...
为什么org.w3c.dom.NodeList不是java.lang.Iterable界面的扩展名?
这对我来说听起来很反直觉。特别是因为文档说:
NodeList接口提供有序节点集合的抽象,而不定义或约束此集合的实现方式。 DOM中的NodeList对象是实时的。 NodeList中的项目可以通过整数索引访问,从0开始。
PS:如果适用,请在适当的引文中回复您的答案。
答案 0 :(得分:9)
org.w3c.dom.NodeList
早于Java版本1.5中引入的Iterable
。
可能因为兼容性原因没有更新,但我没有参考。
答案 1 :(得分:2)
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;