android之XML解析

來源:互聯網
上載者:User

標籤:android   sax   xml   

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

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

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

private void parse(String xmlString,List<Mp3Info> 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<Mp3Info> infos = null;    private Mp3Info mp3Info = null;    private String tagname = null;    public Mp3ListContentHandler(List<Mp3Info> 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檔案:

<?xml version="1.0" encoding="ISO-8859-1"?><resources>    <resource>        <id>0001</id>        <mp3.name>a1.mp3</mp3.name>        <mp3.size>10033011</mp3.size>        <lrc.name>a1.lrc</lrc.name>        <lrc.size>9053</lrc.size>    </resource>    <resource>        <id>0002</id>        <mp3.name>a2.mp3</mp3.name>        <mp3.size>10033011</mp3.size>        <lrc.name>a2.lrc</lrc.name>        <lrc.size>9053</lrc.size>    </resource></resources>

android之XML解析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.