SAX: Simple API for XML DOM: Document Object Model JAXP: Java API for XML Processing 1、SAX, DOM是两种对xml文档进行分析的方法(没有具体的实现,只有接口)所以他们不是解释器,仅仅靠他们是完成不了对xml文档的处理的。 sax的包是org.xml.sax dom的包是org.w3c.dom 包的名称很重要,它有助于你理解他们之间的关系。 2. JAXP Sun在XML领域总是后知后觉,等到Sun重视XML的时候,XML的API早就满天飞了,尤其是IBM具有非常大的领先优势。不过Sun是规范的制订者,于是参考W3C的标准制订了JAXP规范。 所以JAXP也不是具体的实现,只是个API,所以仅有JAXP也是无法工作的。它封装了SAX/DOM两种接口。并在SAX/DOM的基础上作了一套比较简单的API以供开发人员使用。 JAXP的包是javax.xml.parsers JAXP它只是一个规范,完成了对SAX、DOM的包装,生成了DocumentBuilderFactory、 DocumentBuilder和SAXParserFactory、SAXParser。也就是设计模式中的工厂模式,他的好处就是具体的对象(解释器)建立由子类完成。JAXP的作用就是提出一个统一的接口,让其它的XML API都来遵循JAXP编程。当你严格采用JAXP编程的时候,是遵循W3C的DOM标准的,那么在JAXP底层你实际上可以任意切换不同的DOM实现(也就是解释器),例如Xerces,或者Crimon,再或者其它,切换方法就是配置jaxp.properties。因此JAXP就是一些标准接口而已。 JAXP应用程序 -> JAXP接口 -> Xerces DOM实现 -> Xerces DOM/SAX 解析器 JAXP应用程序 -> JAXP接口 -> Crimson DOM实现 -> Crimson DOM/SAX 解析器 JAXP应用程序 -> JAXP接口 -> Crimson DOM实现 -> Xerces DOM/SAX 解析器 3. JDom & Dom4j W3C的DOM标准API难用的让人想撞墙,于是有一帮人开发Java专用的XML API目的是为了便于使用,这就是JDom的由来,开发到一半的时候,另一部分人又分了出来,他们有自己的想法,于是他们就去开发Dom4j,形成了今天这样两个API,至于他们之间的性能,JDom全面惨败,Dom4j大获全胜。 JDOM、DOM4J相当于上面的JAXP接口+DOM实现部分,它本身没有解析器,它可以使用Xerces或者Crimson的解析器。 jdom应用程序 -> jdom API -> Xerces/Crimson解析器 dom4j应用程序 -> dom4j API -> Xerces/Crimson解析器 dom4j应用程序 -> dom4j API -> Alfred2解析器 4. xerces解释器 在Apache xerces中对jaxp中定义的SAXParser、SAXParserFactory、DocumentBuilder、DocumentBuilderFactory进行了继承,对应SAXParserImpl、SAXParserFactoryImpl、DocumentBuilderImpl、DocumentBuilderFactoryImpl 这就是为什么你的classpath中只要有xerces.jar(其中包含了sax dom jaxp )和 xercesImpl.jar就可以的原因了. 5. Apache Crimson 前身是Sun Project X Parser, 至今Apache Crimson的很多代码都是从X Parser中直接移植过来的。早期的JAXP是和X Parser捆绑在一起的。后来的 JAXP和Apache Crimson捆绑在一起,比如JAXP 1.1。最新的JAXP 1.2 EA(Early Access)改弦更张,采用性能更好的Apache Xalan和Apache Xerces分别作为XSLT处理器和XML解析器,不能直接支持Apache Crimson了,因为其Apache Crimson效率低下 6. Xalan 是一个XSLT处理器。JAXP的XSLT引擎(Transformer类)来输出XML文档,这种方法也许是标准的方法 了,使用起来十分灵活,特别是可以自如控制输出格式,是将来创建/更新XML的主流方法 7. DOM是W3C的官方标准, 而SAX非W3C官方标准,是民间事实标准,一种社区性质的讨论产物。 (1). DOM将整个XML文档载入到内存中处理,DOM以一个分层的对象模型来映射xml文档:在内存中创建DOM树,生成DOM树上的每个Node对象。 (2). SAX则相反,它将文档中的元素转化为对象来处理,可以检测一个即将到来的 XML流,由此并不需要所有的XML代码同时载入到内存中。 8. XSL: XML Stylesheet Language 9. XSLT: XML Stylesheet Language Transformations