第10章 DOM、SAX和JAXP解析

前面已经提到,XML文档的一个重要应用方面是作为数据传输工具,如果应用程序需要使用XML文档作为数据传输工具,那就涉及使用应用程序来读写XML文档了。很明显,XML文档本身是结构化文档,如果依然使用普通文件I/O进行读写,不仅效率太低,而且编程复杂,显然不是一个好方法。

为了能更好地处理XML文档解析问题,W3C提供了DOM模型的推荐标准,DOM模型将XML结构化文档映射为一系列具有父子、兄弟关联关系的节点对象集,从而允许应用程序调用这些节点对象的方法、属性来读取或改变XML节点的内容,从而可以动态地读取或改变XML文档的内容。除此之外,XML行业还有另一个XML解析的事实规范——SAX,它采用一种基于事件处理的方式来解析XML文档。SAX解析器在处理一份XML文档时,会在XML文档中依次触发文档开始、元素开始、元素结束、文档结束等事件,应用通过监听SAX解析过程中所触发的事件即可获取XML文档的内容。

Java为DOM和SAX两种解析机制都提供了支持,Java解析XML文档的API称为JAXP,它的全称是Java API for XML。JAXP往往作为JDK的一部分发布,但它仅仅是一些API接口,并未提供真正的实现,因此实际使用过程中还需要具体的解析实现,例如Xerces-J,本章所介绍的JAXP解析都是基于Xerces-J的。JAXP的作用在于提供高层次的解耦:应用程序面向JAXP接口编程,从而与底层具体的解析实现分离开来。

本章要点

alt DOM、SAX解析机制的概念和差异

alt 理解JAXP API接口的抽象和作用

alt 深入掌握DOM模型

alt DOM树里的各种节点类型

alt 使用DOM解析XML文档

alt 使用DTD验证XML文档

alt 使用DOM创建XML文档

alt 使用DOM修改XML文档

alt 解析DTD信息

alt 使用DOM解析命名空间信息

alt 理解SAX的事件处理机制

alt 实现SAX解析器和SAX监听器

alt 使用SAX解析XML文档

alt 使用SAX解析命名空间信息

alt DOM和SAX的差别

alt 在JAXP中使用XML Schema