org.w3c.dom.NodeList不会扩展Iterable

时间:2014-03-27 15:24:34

标签: java dom

为什么Java org.w3c.dom库的作者选择不支持Iterable接口?例如,界面NodeList似乎非常适合扩展Iterable。

1 个答案:

答案 0 :(得分:4)

万维网联盟已将Document Object Model (DOM)定义如下:

  

文档对象模型是平台和语言中立   允许程序和脚本动态访问的接口   并更新文件的内容,结构和风格。

许多语言的实现看起来非常像彼此,聪明人认为这是一个好主意,很多年前他们设计它时。 因此,它看起来并不像任何语言中熟悉的任何东西。

如果要使用看起来像Java库的w3c DOM的替代方法,请使用JDOM。或者使用映射/绑定解决方案将XML映射到Java对象,例如JAXB

但是如果你需要与已经使用w3c DOM的现有库(如内置的XSLT和XSD处理器)进行交互,那么你就会坚持下去。不幸的是


到@eis:

是的,您有理由不能将Iterable等接口添加到NodeList,原因是文档对象模型的Java绑定在{{ 3}}。取NodeList,它在标准中100%定义。没有任何额外接口的空间。

<强>组织/ W3C / DOM / NodeList.java:

package org.w3c.dom;

public interface NodeList {
    public Node item(int index);

    public int getLength();

}

C#标准中没有绑定,但有一个用于EcmaScript。我相信你提到的IXMLDocument接口也用于他们的EcmaScript实现(但我可能是错的),在这种情况下,他们仍然需要在他们支持的方法和类型层次结构方面坚持标准。 / p>

不同之处在于EcmaScript绑定仅描述了应存在的方法,而Java绑定则描述了接口中的确切方法。 但是在Java中没有理由认为实现NodeList的类也不能实现Iterable。但是,如果您的代码依赖于它,那么它将无法与DOM标准一起使用,而只能使用特定的实现。

微软从未真正打过这种精细的区别,因为他们通常不会满足多个符合标准的实施 - 如果你使用微软标有的任何方法&#34; *表示对世界的扩展Wide Web Consortium(W3C)DOM。&#34;在Microsoft的实现中,您没有使用DOM标准。