解析器实现中Document的功能

时间:2010-12-10 07:52:51

标签: java xml xml-parsing

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

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

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

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

1)这些文件的方法在哪里实施?

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

2 个答案:

答案 0 :(得分:2)

DocumentNodeElement以及所有其他类型的接口。有几个库为这些接口提供了一个实现 - 一个突出的例子是Apache Xerces。从他们的头版:

  

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

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

答案 1 :(得分:0)

您在 DocumentBuilderFactory javadoc 上获得了在public static DocumentBuilderFactory newInstance()获取真实类DocumentBuilderFactory及其他所有内容的策略。