天天看點

Android Pull解析

  解析xml的三種方式:DOM, SAX, PULL

好像Android學習過程中SAX被提到的機率高了一些. 固然SAX解析很好,并且名字很sexy. 可Pull解析有過之而無不及.

開工.

先認識一個檔案catalogue.xml,放置于assets檔案夾下

<?xml version="1.0" encoding="UTF-8"?> 

<chapters> 

        <chapter id="1"> 

            <name>wait_notify_demo</name> 

            <summary>wait_notify例子</summary> 

        </chapter> 

</chapters> 

可以了解為一本書的章節對象, 第一章名為wait_notify_demo

然後我們要解析之

package com.lc.corecode.utility; 

import java.io.InputStream; 

import java.util.LinkedList; 

import java.util.List; 

import org.xmlpull.v1.XmlPullParser; 

import android.util.Xml; 

import com.lc.corecode.pojo.Chapter; 

public class PullParse { 

    /** 

     * pull解析catalogue.xml 

     * @param inputStream 目标檔案 

     * @return chapter對象的集合 

     * @throws Exception 

     */ 

    public List<Chapter> getAllChapters(InputStream inputStream) throws Exception{ 

        List<Chapter> chapters = null; 

        Chapter chapter = null; 

        XmlPullParser parser =Xml.newPullParser(); 

        parser.setInput(inputStream, "UTF-8"); 

        int event = parser.getEventType();//産生第一個事件 

        while (event != XmlPullParser.END_DOCUMENT) { 

            switch (event) { 

            case XmlPullParser.START_DOCUMENT://文檔開始 

                chapters = new LinkedList<Chapter>(); 

                break; 

            case XmlPullParser.START_TAG://标簽開始事件 

                if ("chapter".equals(parser.getName())) {//标簽為<chapter> 

                    chapter = new Chapter(); 

                    chapter.setId(Integer.parseInt(parser.getAttributeValue(0))); 

                } 

                if (chapter != null) { 

                    if ("name".equals(parser.getName())) {//标簽為<name> 

                        chapter.setName(parser.nextText()); 

                    } else if ("summary".equals(parser.getName())){ 

                        chapter.setSummary(parser.nextText()); 

                    } 

            case XmlPullParser.END_TAG://标簽結束 

                if ("chapter".equals(parser.getName())) {//結束标簽</chapter> 

                    chapters.add(chapter); 

                    chapter = null; 

            default: 

            } 

            event = parser.next();//進入下一個元素 

        } 

        return chapters; 

    } 

最後是找個地方調用

PullParse pullParse = new PullParse(); 

List<Chapter> chapters = pullParse.getAllChapters(getResources().getAssets().open("catalogue.xml")); 

收工.

本文轉自chainli 51CTO部落格,原文連結:http://blog.51cto.com/lichen/1194036,如需轉載請自行聯系原作者

繼續閱讀