java是解析器实现中文档的功能
最近我在研究解析器,包括用于构建解析器的设计模式。我选择的例子是javax。xml。解析器和组织。w3c。dom包
看起来像是用来在这些包中设计解析器结构的工厂和生成器模式。DocumentBuilderFactory将返回一个直接工厂来构建DocumentBuilder。然后,DocumentBuilder使用其parse()方法解析xml文件;但在本例中,返回类型是Document:Document doc = builder.parse(in);
但是,我在这里没有看到的是,Document是一个接口,它包含大量操作XML属性的方法。它还扩展了节点接口。我们仍然可以将其操作称为:doc.hasAttributes()
或doc.getChildNodes()
等
我花了一个小时研究这个,但仍然无法理解这个架构背后的逻辑:
1)这些文件的方法在哪里实施
2)为什么在解析后返回接口类型对象(文档)来表示DOM对象更好
# 1 楼答案
在DocumentBuilderFactory javadoc上,您有一个策略,可以在public static DocumentBuilderFactory newInstance()获取真正的类DocumentBuilderFactory,以及所有其他内容
# 2 楼答案
Document
、Node
、Element
和所有其他类型都是接口。有几个库为这些接口提供了实现——一个突出的例子是ApacheXerces。从他们的头版:如果您确实需要知道实际使用的是哪个DOM实现,请启动调试器或将
Document
对象的类名转储到console/log