Java中关于操作XML两大核心API库是:SAX(Simple API for XML)与 DOM。这里我们先讲SAX。SAX使得程序员可以在XML解析事件发生时进行编程,SAX库中提供的接口将成为程序员XML编程工具箱中的重要组成部分。虽然SAX库中的类大都很小,数量也很少,但它们为Java和XML提供了至关重要的操作框架。
回调和基于事件的编程
SAX使用回调模型与用户代码进行交互,你之前可能已经听说过这种被称为基于事件的编程模型。SAX在解析整个文档时,是逐个解析文档元素的,每当解析过程中遇到一个标签,注释,文本,或者是XML中的任何其他类型元素时,它都将回调进用户代码中,这标志着一个事件的发生,而正是这种基于事件的机制,使得用户代码可以有机会被执行。
举个例子来说,如果SAX遇到一个元素的开始标签,它将触发一个startElement事件,并提供诸如元素名称,属性等相关信息,然后就会调用用户的处理代码。作为一个开发人员,你必须为每个事件都编写相应的处理代码,从文档开始直到结束的每个元素(包括注释)的每个事件都不能遗漏,这一点非常重要。基于事件的编程模型的特点在于用户代码不是主动去执行,它是被动的,在等待被调用,然后才会去执行程序。
SAX API
SAX API库是由大量定义了回调方法的接口组成的,举例来说,为了在处理字符时,能触发相应的处理事件,你需要实现ContentHandler接口,并且提供characters()方法的具体实现。请记住,你从开发商那里得到的XML解析器只会实现XMLReader和一些如Attributes等助手类的接口,并提供相应解析事件,其余的事情就都要自己完成了。
安装SAX解析器
像大多数API库一样,如果要使用SAX来处理XML文档,你需要使用SAX API库中的全部类和接口,当然,也包括对接口的具体实现。这些文件通常被打成一个下载包,例如,Apache的Xerces项目就提供了一个包含多个JAR文件的压缩文件以供下载,其中包含了所有的SAX API,各种解析器的实现类及其相关的示例和帮助文档。对于Xerces来说,可以访问:http://xml.apache.org/xerces2-j 。下载安装包并解压,其中有xml-apis.jar文件中包括了XML标准API,如SAX和DOM,同时在xercesImpl.jar文件中提供了对标准API的Xerces实现。