一、原理不同:

     DOM解析原理:一次性把xml文档加载进内存,然后在内存中构建Document树。 对内存要求比较要。   

                    缺点: 不适合读取大容量的xml文件,容易导致内存溢出。

     SAX解析原理: 加载一点,读取一点,处理一点。对内存要求比较低。

二、SAX

          SAX解析工具-Sun公司提供的。内置在jdk中。org.xml.sax.*

三、核心的API:

     SAXParser类: 用于读取和解析xml文件对象

 parse(File f,DefaultHandler dh)方法: 解析xml文件

                  参数一: File:表示 读取的xml文件。

                  参数二: DefaultHandler: SAX事件处理程序。使用DefaultHandler的子类

四、应用

     1.创建SAXParser对象 

      SAXParserparser=SAXParserFactory.newInstance().newSAXParser();

    2.调用parse方法

             parser.parse(newFile("./src/contact.xml"),newMyDefaultHandler());

    3.DefaultHandler类的API:

                  void startDocument()  : 在读到文档开始时调用

                   void endDocument() :在读到文档结束时调用

                  void startElement(String uri, String localName, String qName, Attributes attributes) :读到开始标签时调用                        

                   void endElement(String uri, String localName, String qName)  :读到结束标签时调用

                   void characters(char[] ch, int start, int length) : 读到文本内容时调用

五、对比

                                                   ============DOM解析    vs   SAX解析============


DOM解析SAX解析

原理: 一次性加载xml文档,不适合大容量的文件读取原理: 加载一点,读取一点,处理一点。适合大容量文件的读取

DOM解析可以任意进行增删改成SAX解析只能读取

DOM解析任意读取任何位置的数据,甚至往回读SAX解析只能从上往下,按顺序读取,不能往回读

DOM解析面向对象的编程方法(Node,Element,Attribute),Java开发者编码比较简单。SAX解析基于事件的编程方法。java开发编码相对复杂。

六、总结

                            1)Dom4j修改xml文档

                                    new XMLWrier();

                                          ......

                            2)xPath技术: 快速查询xml节点

                                          selectNodes()

                                          selectSinglNode();

                                   xpath表达式语言         

                            3)  SAX解析

                                          SAXParser parse

                                                 parser()

                                   DefaultHandler类:

                                                 startElement();

                                                 characters();

                                                 endElement();