为什么Java org.w3c.dom库的作者选择不支持艾特雷接口呢?例如,接口NodeList似乎非常适合扩展Iterable。
发布于 2014-03-27 15:37:58
万维网联盟将文档对象模型(DOM)定义如下:
文档对象模型是一个与平台和语言无关的接口,它允许程序和脚本动态访问和更新文档的内容、结构和样式。
很多语言的实现看起来非常相似,很多年前,聪明人在设计时认为这是个好主意。因此,在任何语言中,它看起来都不像熟悉的任何东西。
如果您想使用类似于w3c库的Java的替代方案,请使用JDOM。或者使用映射/绑定解决方案(如JAXB )将XML映射到Java对象
但是,如果您需要与已经使用w3c DOM的现有库(比如内置的XSLT和XSD处理器)进行接口,那么您就只能使用它了。不幸的是。
转至@eis:
是的,您不能将诸如Iterable这样的接口添加到NodeList中是有原因的,这是因为文档对象模型的Java是在标准中定义的。以NodeList为例,它在标准中是100%定义的。没有任何额外的接口空间。
org/w3c/dom/NodeList.java:
package org.w3c.dom;
public interface NodeList {
public Node item(int index);
public int getLength();
}在C#的标准中没有绑定,但是对于EcmaScript有一个绑定。我相信您提到的IXMLDocument接口也用于它们的EcmaScript实现(但我可能错了),在这种情况下,它们仍然需要在所支持的方法和类型层次结构方面坚持标准。
不同之处在于,EcmaScript绑定只描述应该存在哪些方法,而Java则描述接口中的确切方法。但是,在Java中,实现NodeList的类也不可能实现Iterable。但是,如果您的代码依赖于此,那么它将不适用于DOM标准,而只适用于特定的实现。
微软从未真正为这种细微的区别感到烦恼,因为它们通常不适合符合多个标准的实现--如果您使用任何微软标记为"* Denotes是对万维网联盟(W3C) DOM的扩展“的方法。在Microsoft的实现中,您没有使用DOM标准。
https://stackoverflow.com/questions/22692087
复制相似问题