天天看點

android中XmlPullParse解析xml的用法

首先我們先來了解XmlPullParse代碼讀取所代表的含義.

   讀取到xml的聲明傳回      START_DOCUMENT; 

   讀取到xml的結束傳回        END_DOCUMENT ; 

   讀取到xml的開始标簽傳回 START_TAG 

   讀取到xml的結束标簽傳回END_TAG 

   讀取到xml的文本傳回       TEXT 

傳回值為int類型,其中他們所代表的值為

int START_DOCUMENT = 0 ; //xml的聲明傳回,當導航到XmlPullParser.START_DOCUMENT,可以不做處理,當然你可以執行個體化集合對象等等。

int END_DOCUMENT = 1; //xml的結束傳回,

int START_TAG = 2;  //開始标簽(如果你不懂什麼是開始标簽,那就百度)

int END_TAG = 3;   //結束标簽

int TEXT = 4;  //文本反悔
           

擷取xml的事件類型為 XmlPullParse.getEventType()

下面講一個 新聞用戶端的事例

XML新聞

<?xml version="1.0" encoding="utf-8"?>
  <channel>
    <item>
        <title>黃興國最年輕副手被降級 曾是天津最年輕副市長</title>
        <image>http://k.sinaimg.cn/n/default/transform/20170710/BOZU-fyhweih2497519.png/w200h134l50t1bf5.jpg</image>
        <type>1</type>
        <comment>163</comment>
    </item>
    <item>
        <title>麗江遭毆打女遊客與6名被告人達和解 撤回訴訟</title>
        <image>http://k.sinaimg.cn/n/default/transform/20170710/dcrA-fyhweih2482078.jpg/w200h134l50t1d03.jpg</image>
        <type>2</type>
    </item>
    <item>
        <title>這段視訊告訴你洪水有多麼的吓人,隻要幾秒鐘,可能就會命喪黃泉</title>
        <image>http://k.sinaimg.cn/n/default/20170710/kyMF-fyhwret0616031.jpg/w200h134l50t1056.jpg</image>
        <type>3</type>
    </item>
    <item>
        <title>黃興國最年輕副手被降級 曾是天津最年輕副市長</title>
        <image>http://k.sinaimg.cn/n/default/transform/20170710/BOZU-fyhweih2497519.png/w200h134l50t1bf5.jpg</image>
        <type>4</type>
    </item>
    <item>
        <title>印要在邊界打持久戰?中方:證明印非法越界有預謀</title>
        <image>http://k.sinaimg.cn/n/default/transform/20170710/ZLeO-fyhwehx5509942.jpg/w200h134l50t176b.jpg</image>
        <type>5</type>
    </item>
    <item>
        <title>馬來西亞鐵路訂票網站标“中國台灣” 網友:沒毛病</title>
        <image>http://k.sinaimg.cn/n/default/transform/20170710/y9uN-fyhwefp0466238.png/w200h134l50t1392.jpg</image>
        <type>6</type>
        <comment>1630</comment>
    </item>
</channel>
           

解析xml

package com.example.news;

import android.util.Xml;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2017\7\11 0011.
 */

class XmlParserUtils {
    public static List<News> parserXml(InputStream in) throws Exception {
        List<News> newsLists =  null;
        News news = null;
        // [1]擷取xml的解析器
        XmlPullParser parser = Xml.newPullParser();
        // [2]設定解析器 要解析的内容
        parser.setInput(in, "utf-8");
        // [3]擷取解析的事件類型
        int type = parser.getEventType();
        // [4]不停的向下解析





        while (type != XmlPullParser.END_DOCUMENT) {
            // [5]具體判斷一下解析的是開始節點 還是結束節點
            switch (type) {
                case XmlPullParser.START_TAG: // 解析開始節點

                    //[6]具體判斷一下解析的是哪個開始标簽
                    if("channel".equals(parser.getName())){
                        //建立一個list集合
                        newsLists = new ArrayList<News>();
                    }else if ("item".equals(parser.getName())) {
                        news = new News();

                    }else if ("title".equals(parser.getName())) {
                        news.setTitle(parser.nextText());

                    }else if ("image".equals(parser.getName())) {
                        news.setImage(parser.nextText());

                    }else if ("type".equals(parser.getName())) {
                        news.setType(parser.nextText());

                    }else if ("comment".equals(parser.getName())) {
                        news.setComment(parser.nextText());

                    }

                    break;

                case XmlPullParser.END_TAG: // 解析結束标簽

                    if ("item".equals(parser.getName())) {
                        //把javabean添加到 集合
                        newsLists.add(news);

                    }
                    break;
            }

            // 不停的向下解析
            type = parser.next();
        }

        return newsLists;

    }
}