从网上查到“SAX解析器采用了基于事件的模型,它在解析 XML 文档的时候可以触发一系列的事件”现在需要用SAX解析500M的XML,用VTD-XML解析报内存溢出。所以现在想改成SAX方式改写解析方式。最终,根据表名,将解析的内容放到不同的Excel中。现在的目的是,想了解SAX解析xml的步骤,思路。
另外,这句话比较迷惑。“SAX解析器采用了基于事件的模型,它在解析 XML 文档的时候可以触发一系列的事件”

解决方案 »

  1.   

    SAX解析xml是一行一行处理的,当他处理的行里有事件的时候,就会触发这个事件。
      

  2.   

    SAX在发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到
      

  3.   

    package com.yangrs;
      import java.io.IOException;
      import javax.xml.parsers.*;
      import org.xml.sax.Attributes;
      import org.xml.sax.SAXException;
      import org.xml.sax.helpers.DefaultHandler;
      /**
      *
      * date 12008-12-16
      * SAX解析XML文件
      * 优点,简单
      *
      */
      public class SAXtoMyxml {
      public static void main(String[] args) throws ParserConfigurationException,
      SAXException, IOException {
      // 通过工厂获得SAX解析器
      SAXParserFactory sf = SAXParserFactory.newInstance();
      SAXParser sax = sf.newSAXParser();
      //解析器
      // 通过解析器解析xml文件
      sax.parse("myxml1.xml", new SAXHander()); //使用自定义的监听器
      }
      }
      // 自定义sax解析监听器
      class SAXHander extends DefaultHandler {
      public void startDocument() throws SAXException {
      System.out.println("文档开始 "); 
    --------------------------------------------------------------------------------  }
      public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
      System.out.println("元素开始 "+qName);
      }
      public void characters(char[] ch, int start, int length) throws SAXException {
      String text = new String(ch,start,length);
      //去掉xml文件中的空格节点
      if(text.trim().equals("")) {
      return;
      }
      System.out.println("文本内容 "+text);
      }
      public void endElement(String uri, String localName, String qName) throws SAXException {
      System.out.println("元素结束 "+qName);
      }
      public void endDocument() throws SAXException {
      System.out.println("文档结束 ");
      }
      }
      

  4.   

    +1
    XML文件太大的时候,只能用SAX这样的逐行处理的方法,用时间换空间了
      

  5.   

    解析500M的XML  还是用StAX吧,jdk1.6里的,最适合处理这种超大容量的文件