歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> 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

Copyright © Linux教程網 All Rights Reserved