第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接口编程,从而与底层具体的解析实现分离开来。
本章要点
DOM、SAX解析机制的概念和差异
理解JAXP API接口的抽象和作用
深入掌握DOM模型
DOM树里的各种节点类型
使用DOM解析XML文档
使用DTD验证XML文档
使用DOM创建XML文档
使用DOM修改XML文档
解析DTD信息
使用DOM解析命名空间信息
理解SAX的事件处理机制
实现SAX解析器和SAX监听器
使用SAX解析XML文档
使用SAX解析命名空间信息
DOM和SAX的差别
在JAXP中使用XML Schema