Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java org.w3c.dom.NodeList不';不可扩展_Java_Dom - Fatal编程技术网

Java org.w3c.dom.NodeList不';不可扩展

Java org.w3c.dom.NodeList不';不可扩展,java,dom,Java,Dom,Java org.w3c.dom库的作者为什么选择不支持该接口?例如,该界面似乎非常适合扩展Iterable。万维网联盟已将其定义如下: 文档对象模型是平台和语言中立的 允许程序和脚本动态访问的接口 更新文件的内容、结构和样式 许多语言的实现看起来非常相似,聪明的人在很多年前设计它时认为这是个好主意。 因此,它在任何语言中看起来都不熟悉 如果您想使用一个看起来像Java库的W3CDOM替代品,请使用。或者使用映射/绑定解决方案将XML映射到Java对象,例如 但是如果您需要与已经使用W3CDOM

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

万维网联盟已将其定义如下:

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

许多语言的实现看起来非常相似,聪明的人在很多年前设计它时认为这是个好主意。 因此,它在任何语言中看起来都不熟悉

如果您想使用一个看起来像Java库的W3CDOM替代品,请使用。或者使用映射/绑定解决方案将XML映射到Java对象,例如

但是如果您需要与已经使用W3CDOM的现有库(如内置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标准一起工作,而只能与特定的实现一起工作


微软从未真正考虑过这种细微的区别,因为它们通常不适合多种符合标准的实现——如果您使用微软标记为“*表示万维网联盟(W3C)DOM的扩展”的任何方法,在微软的实现中,那么您就没有使用DOM标准。

我认为DOM作为语言中立的接口与java接口org.w3c.DOM库实现的事实无关。例如,Microsofts MSXML DOM具有和接口,它们相互补充,并向DOM规范添加扩展。简言之,规范没有规定任何理由阻止java以类似方式添加特定于java的接口,例如org.w3c.DOM中的Iterable。@eis添加了我对上述答案的响应,好啊显然java绑定是由标准提供的,在附录中,所以你是对的。您可以在答案中使用link来引用它们。刚才问了我同样的问题,org.w3c.dom出现在JDK1.4中,迭代器出现在JDK1.2中。简单的回答是,W3C Java绑定规范再一次是由一个从未(用Java)编码的人制定的。事实上,NodeList不适合并且没有遵循惯例(getLength是什么意思!!)真是一个巨大的痛苦。