首先我們先來了解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;
}
}