Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android之XML解析

android之XML解析

編輯:關於Android編程

所謂SAX,就是SAX simple API for XML,是一個解析XML文件的簡單API。

SAX解析XML的工作原理,是對文檔進行順序掃描,當掃描到文檔開始與結束,元素開始與結束,觸發相應的響應函數。是一種事件驅動型的解析方式。它可以在解析文檔的任意時刻停止解析。

\

通過該圖我們可以大概了解解析的過程。

private void parse(String xmlString,List infos){
    // SAXParserFactory 是一個使用工廠模式的類
    SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
    try {
        XMLReader reader = saxParserFactory.newSAXParser().getXMLReader();
        reader.setContentHandler(new Mp3ListContentHandler(infos));
        reader.parse(new InputSource(new StringReader(xmlString)));

    }catch (Exception e) {
        e.printStackTrace();
    }

}

使用SAX解析XML文件,首先要得到一個SAXParserFactory對象,然後得到一個XMLreader對象,再將自己實現的Contenthandler接口的類對象傳遞給XMLreader的setContenthandler方法,最後調用XMLreader的parse方法,將需要解析的XML文件生成Inputsource放入即可。

解析XML文件的關鍵在於自己實現Contenthandler這一接口的類,在這個類中,可以按照我們的需求來解析XML文件,將不同標簽下的內容按照自己的需要使用、存儲。

/**
 * XML解析類,通過繼承DefualtHandler,並復寫該類中的方法解析XML文件
 * 這裡采用的是SAX解析方式,同時沒有選擇實現接口,而是通過adapt模式,繼承一個實現了ContentHandler接口的類
 * @author 龍凱
 *
 */
public class Mp3ListContentHandler extends DefaultHandler {
    private List infos = null;
    private Mp3Info mp3Info = null;
    private String tagname = null;


    public Mp3ListContentHandler(List infos) {
        super();
        this.infos = infos;
    }
    /*
     * (non-Javadoc)
     * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
     * 處理文件內容
     */
    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        String info = new String (ch,start,length);
        if (tagname.equals("id")) {
            mp3Info.setId(info);
        }
        else if(tagname.equals("mp3.name")) {
            mp3Info.setMp3name(info);
        }
        else if (tagname.equals("mp3.size")) {
            mp3Info.setMa3size(info);
        }
        else if (tagname.equals("lrc.name")) {
            mp3Info.setLrcname(info);
        }
        else if (tagname.equals("lrc.size")) {
            mp3Info.setLrcsize(info);
        }
    }

    @Override
    public void endDocument() throws SAXException {
        super.endDocument();
    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        //如果結束標簽名為設定標簽名,實現特定的方法
        if (localName.equals("resource")) {
            infos.add(mp3Info);
        }
        tagname = "";
    }

    @Override
    public void startDocument() throws SAXException {
    }

    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        // 每次新解析到一個標簽時,識別標簽名,根據不同的標簽名,調用不同的方法
        this.tagname = localName;
        if (tagname.equals("resource")) {
            mp3Info = new Mp3Info();
        }
    }
}

通過這個類,主要實現的是解析一個Mp3resource.XML文件,通過該文件讀出mp3文件的名字,大小,id,以及歌詞lrc文件的名字大小,存儲在一個list的list中。下面是XML文件:




    
        0001
        a1.mp3
        10033011
        a1.lrc
        9053
    

    
        0002
        a2.mp3
        10033011
        a2.lrc
        9053
    


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved