最近我正在研究解析器,包括用于构建解析器的设计模式。我选择的例子是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对象会更好?
答案 0 :(得分:2)
Document
,Node
,Element
以及所有其他类型的接口。有几个库为这些接口提供了一个实现 - 一个突出的例子是Apache Xerces。从他们的头版:
Xerces2还提供了文档对象模型级别3核心和加载/保存W3C建议的完整实现,并提供了XML包含(XInclude)W3C建议书的完整实现。
如果您确实需要知道实际使用了哪个 DOM实现,请启动调试器或将Document
对象的类名转储到控制台/日志。
答案 1 :(得分:0)
您在 DocumentBuilderFactory javadoc 上获得了在public static DocumentBuilderFactory newInstance()获取真实类DocumentBuilderFactory及其他所有内容的策略。