SAX和Dom

来源:互联网 发布:centos如何查看文件夹 编辑:程序博客网 时间:2024/06/06 02:49

首先要明确一个概念,SAX和dom(w3c)是标准的xmlapi接口,而各个语言必须实现接口,但具体的实现又不同。
xml解析器:有Dom型和SAX型的xml解析器,即将解析后的xml文件以树状或事件的形式提供
java实现的Dom接口(javax.xml.parsers用来寻找符合DOM标准的XML API实现类的位置,org.w3c.dom)->解析器的Dom实现->SAX型的xml解析器或者Dom型的解析器。(jaxp)

而由于dom标准的Api的难用,开发的适合java的apijdom和dom4j,其不再有可移植性。jdom应用用程序 -> jdomAPI -> Xerces/Crimson解析器

java提供
dom(org.w3c.dom),sax(org.xml.sax)同时添加java.xml.parsers等包(主要通过工厂类调用不同的解析器)
解析器提供这些接口的实现。比如实现dom中定义的text接口,java中定义text抽象类,解析器textIMP类继承text。比如xerces解析器就包括dom2,dom3,jaxp等接口的实现
dom,sax是标准,java在创建这些接口之后,又添加了一些接口,相当于附加了一些java的标准,作为用于java的解析器必须在实现dom和sax的同时实现java附加的接口。
sax调用解析器的saxparser进行解析,dom调用解析器的domparser进行解析。
sax中的attributes在解析器中变为xmlattributes,然后是xmlAttributesImpl对xmlattributes实现
Dom:
DocumentBuilder db=factory.newDocumentBuilder();
Document xmldoc=db.parse(new File("Test1.xml"));相当于解析器中的domparser.parse(),返回的是  

                                                Documnet的子类DocumnetImpl
  root=xmldoc.getDocumentElement();
           
Sax:
xmlReader.parser();相当于saxparser.parser();然后激活默认的DefaultXMLDocumentHandler


而jdom和dom4j并不是基于dom实现的。其提供的接口要比dom丰富易用,但可移植性收限。