Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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/7/google-maps/4.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 解析器实现中文档的功能_Java_Xml_Xml Parsing - Fatal编程技术网

Java 解析器实现中文档的功能

Java 解析器实现中文档的功能,java,xml,xml-parsing,Java,Xml,Xml Parsing,最近我正在研究解析器,包括用于构建解析器的设计模式。我选择的示例是javax.xml.parsers和org.w3c.dom包 看起来像是用于在这些包中设计解析器结构的工厂和生成器模式。DocumentBuilderFactory将返回一个直接工厂来构建DocumentBuilder。然后,DocumentBuilder使用其parse()方法解析xml文件;但在本例中返回类型为Document:Document doc=builder.parse(in) 但是,我在这里没有得到的是,文档是一个

最近我正在研究解析器,包括用于构建解析器的设计模式。我选择的示例是javax.xml.parsers和org.w3c.dom包

看起来像是用于在这些包中设计解析器结构的工厂和生成器模式。DocumentBuilderFactory将返回一个直接工厂来构建DocumentBuilder。然后,DocumentBuilder使用其parse()方法解析xml文件;但在本例中返回类型为Document:
Document doc=builder.parse(in)

但是,我在这里没有得到的是,文档是一个接口,它包含了大量操作XML属性的方法。它还扩展了节点接口。我们仍然可以调用它的操作:
doc.hasAttributes()
doc.getChildNodes()

我花了一个小时在这上面,但仍然无法理解这个架构背后的逻辑:

1) 这些文档的方法在哪里实现


2) 为什么在解析后返回接口类型对象(Document)来表示DOM对象更好?

文档
节点
元素
以及所有其他类型都是接口。有几个库提供了这些接口的实现——一个突出的例子是ApacheXerces。从他们的头版:

Xerces2还提供了文档对象模型级别3核心和加载/保存W3C建议的完整实现,并提供了XML包含(XInclude)W3C建议的完整实现


如果您确实需要知道实际使用的是哪个DOM实现,请启动调试器或将
文档
对象的类名转储到控制台/日志。

您在DocumentBuilderFactory javadoc上有获取实际类DocumentBuilderFactory以及所有其他内容的策略