Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Android入门开发之SAX

一. SAX简介SAX,  Simple API for XML, 是一个解析速度快并且占用内存少的XML解析器,适合于移动平台。 它同时既是一种接口,也是指一个软件包。 作为接口,SAX是事件驱动型XML解析的一个标准接口, 也就是说它不需要解析完整个文档,采用相应的事件触发来进行回调处理。二 . SAX的原理SAX的工作原理,简单说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束,元素(element)开始与结束,文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直到文档结束。大多数SAX实现都会产生以下类型的事件:1. 在文档的开始和结束时触发文档处理事件。2. 在文档内每一XML元素接受解析的前后触发元素事件3. 任何元数据通常都由单独的事件交付。4. 在处理文档的DTD或者Schema时产生DTD或者Schema事件。5. 产生错误事件用来通知主机,应用程序解析错误。SAX在解析文档的过程中会产生如下一系列的事件:1. 创建事件处理程序2. 创建SAX解析器3. 将事件处理程序分配给解析器4. 对文档进行解析,将每个事件发送给处理程序三. ContentHandler接口ContentHandler是Java类包中一个特殊的SAX接口,位于org.xml.sax包中。该接口封装了一些对事件处理的方法,当XML解析器开始解析XML输入文档时,它会遇到某些特殊的事件,比如文档的开头和结束,元素开头和结束,以及元素中的字符数据等事件。 当遇到这些事件时,XML解析器会调用ContentHandler接口中相应的方法来响应该事件。  其接口方法有以下几种:void startDocument();void endDocument();void startElement(....);void endElement(....);void charaters(); //解析中间元素时调用四.  SAX使用示例String strXml = "<TextView       />"; // 这里获取到XML文件的具体内容字符串//必须使用try catch, 否则编译器报错 
try { 
    SAXParserFactory factory = SAXParserFactory.newInstance(); 
    XMLReader reader = factory.newSAXParser().getXMLReader(); //XML解析读取类 
    reader.setContentHandler(new MyContentHandler());  //设置解析的ContentHandler 
    reader.parse(new InputSource(new StringReader(strXml))); 
} catch (Exception e) { 
    // TODO: handle exception 
    e.printStackTrace(); 
} public class MyContentHandler extends DefaultHandler //继承于DefaultHandler 

    @Override 
    public void startDocument() throws SAXException {  //开始解析xml文件 
        // TODO Auto-generated method stub 
        super.startDocument(); 
         
        Log.v("XML", "startDocument"); 
    } 
     
    @Override 
    public void startElement(String uri, String localName, String qName, 
            Attributes attributes) throws SAXException {            //开始解析元素 
        // TODO Auto-generated method stub 
        super.startElement(uri, localName, qName, attributes); 
         
        Log.v("XML", "startElement"); 
    } 
     
    @Override 
    public void characters(char[] ch, int start, int length) 
            throws SAXException { 
        // TODO Auto-generated method stub 
        super.characters(ch, start, length); 
         
        Log.v("XML", "characters"); 
    } 
     
    @Override 
    public void endElement(String uri, String localName, String qName) 
            throws SAXException { 
        // TODO Auto-generated method stub 
        super.endElement(uri, localName, qName); 
         
        Log.v("XML", "endElement"); 
    } 
     
    @Override 
    public void endDocument() throws SAXException { 
        // TODO Auto-generated method stub 
        super.endDocument(); 
         
        Log.v("XML", "endDocument"); 
    } 
     
     
     
     
} 更多Android相关信息见Android 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=11