深入Xerces代码分析DOM结构的创建过程:
1. 在包org.apache.xerces.jaxp下面,
- 以JAXP作为调用入口,通过DocumentBuilderFactory.newInstance(),这样就返回一个DocumentBuilderFactoryImpl实例
- 由DocumentBuilderFactory的newDocumentBuilder方法,可以获取一个DocumentBuilderImpl实例
2. 在包org.apache.xerces.parsers下面,
- 一个DOcumentBuilderImpl的实例含有一个对象domParser: DOMParser,它是XMLParser的子类,SAXParser也是XMLParser的子类。
- 在DOMParser实例中有一个fConfiguration: X11Configuration对象,它掌管DOM解析过程中的所有特征和属性。
- fConfiguration包含一个特别的fCurrentScanner: XMLDocumentScanner对象,它用来执行具体解析文档的任务。
- fCurrentScanner在实际运行中的对象类型是XMLDocumentScannerImpl
3. 在包org.apache.xerces.impl下面,
- fCurrentScanner对象在scanDocument的时候,是一个基于事件的过程,它不停地取出文档的节点,然后根据节点类型,调用XMLDocumentScannerImpl的不同scanXXXX方法进行处理。
- 这些scanXXXX方法会不断的添加节点到DOMParser中的fDocument对象中。
4. 在包org.apache.xerces.dom下面,
ScanDocument的过程中,所有的节点信息会构造并添加到DocumentImpl对象实例fDocument中。