歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android入門開發之SAX

Android入門開發之SAX

日期:2017/3/1 9:57:59   编辑:Linux編程

一. 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