1. Sax概述

 

SAX是一种占用内存少且解析速度快的解析器,它采用的是事件启动,不需要解析完整个文档,而是按照内容顺序看文档某个部分是否符合xml语法,如果符合就触发相应的事件,所谓的事件就是些回调方法(callback),这些方法 定义在ContentHandler中,下面是其主要方法:
startDocument():当遇到文档的时候就触发这个事件 调用这个方法 可以在其中做些预处理工作,如:申请对象资源
endDocument()当结束文档的时候就触发这个事件 调用这个方法 可以在其中做些善后工作,如:释放申请的对象资源
startElement(String namespaceURI, String localName, String qName, Attributes atts)当遇开始标签的时候就会触发这个方法。
endElement(String uri, String localName, String name):当遇到结束标签时触发这个事件,调用此法可以做些善后工作。
charachers(char [] ch, int start, int length)当遇到xml内容时触发这个方法,用new String(ch,start,length)可以接受内容。 

Sax方式创建XML,应用了标准xml构造器 javax.xml.transform.sax.TransformerHandler 事件来创建 XML 文档,需要导入以下内容

 

javax.xml.transform

javax.xml.transform.sax.SAXTransformerFactory;
javax.xml.transform.sax.TransformerHandler;
javax.xml.transform.Transformer;
javax.xml.transform.TransformerConfigurationException;
javax.xml.transform.TransformerFactoryConfigurationError;
javax.xml.transform.OutputKeys;
javax.xml.transform.stream.StreamResult;
javax.xml.transform.sax.SAXTransformerFactory;

javax.xml.parsers

javax.xml.parsers.SAXParser;

javax.xml.parsers.SAXParserFactory;

 

javax.xml.parsers.FactoryConfigurationError;

javax.xml.parsers.ParserConfigurationException;

org.xml.sax

org.xml.sax.Attributes;
org.xml.sax.SAXException;
org.xml.sax.helpers.AttributesImpl;
org.xml.sax.helpers.DefaultHandler;

 

 

sdk源码查看路径
 


 


 

2、Sax 创建 XML

首先,SAXTransformerFactory.newInstance() 创建一个工厂实例 factory

接着,factory.newTransformerHandler() 获取 TransformerHandler 的 handler 对象
 

然后,通过 handler 事件创建handler.getTransformer()、 handler.setResult(result),以及 startDocument()、startElement、characters、endElement、endDocument()等

Code

 

  1. /** Sax方式,创建 XML  */  
  2. public String saxCreateXML(){  
  3.     StringWriter xmlWriter = new StringWriter();  
  4.   
  5.     Person []persons = new Person[3];       // 创建节点Person对象   
  6.     persons[0] = new Person(1"sunboy_2050""upload/201211111027403847.png" />
     


     

     


     

    3、Sax解析XML

    Code

     

    1.     /** Sax方式,解析 XML  */  
    2.     public String saxResolveXML(){  
    3.         StringWriter xmlWriter = new StringWriter();  
    4.   
    5.         InputStream is = readXML(fileName);  
    6.         try {  
    7.             SAXParserFactory factory = SAXParserFactory.newInstance();  
    8.             SAXParser saxParser = factory.newSAXParser();  
    9.               
    10.             PersonHandler handler = new PersonHandler();    // person处理Handler   
    11.             saxParser.parse(is, handler);                   // handler解析xml   
    12.               
    13.             // 获取解析的xml   
    14.             String xmlHeader = handler.getXMLHeader();  
    15.             xmlWriter.append(xmlHeader);  
    16.               
    17.             List<Person> personsList = handler.getPersons();  
    18.             int personsLen = personsList.size();  
    19.             for(int i=0; i<personsLen; i++){  
    20.                 xmlWriter.append(personsList.get(i).toString()).append("\n");