讓我們通過演示示例來介紹如何使用PULL機制解析XML文件。首先看看以下項目的目錄結構:
請遵循以下步驟:
【1】同時創建壹個名為student.xml的新xml文件,並將該XML文件放在assets目錄中。student.xml文件的內容如下:
【html】查看純文本
& lt?XML version =“1.0“encoding =“utf-8“?& gt
& lt學生& gt
& lt學生id =“20110806100“& gt;
& ltname & gt小明《/name & gt;
& lt年齡》22 & lt/age & gt;
& lt性& gt男性《/sex & gt;
& lt/student & gt;
& lt學生id =“20110806101“& gt;
& ltname & gt小李。
& lt年齡》24 & lt/age & gt;
& lt性& gt男性《/sex & gt;
& lt/student & gt;
& lt學生id =“20110806102“& gt;
& ltname & gt小李《/name & gt;
& lt年齡》21 & lt;/age & gt;
& lt性& gt女性《sex & gt
& lt/student & gt;
& lt/學生& gt
【2】根據XML文件中的節點目錄,創建相應的實體類來保存相應的解析信息。在包:com.andyidea.entity下創建壹個新的Student.java類
【html】查看純文本
包com . andyidea . entity;
公共課學生{
私有字符串id;
私有字符串名稱;
私人年齡;
私弦性愛;
公共字符串getId(){
返回id;
}
公共void集合id(字符串id ){
this.id = id
}
公共字符串getName(){
返回名稱;
}
公共void集合名稱(字符串名稱){
this.name = name
}
public int getAge(){
回歸年齡;
}
公共void存儲(int age ){
this.age =年齡;
}
公共字符串getSex(){
返性;
}
public void setSex(String sex ){
this.sex = sex
}
}
【3】定義壹個使用PULL解析XML文件的工具類:ParserByPULL.java。
【html】查看純文本
包com . andyidea . util;
導入Java . io . inputstream;
導入Java . util . ArrayList;
導入Java . util . list;
導入org.xmlpull.v1。XmlPullParser
導入org.xmlpull.v1。XmlPullParserFactory
導入Android . util . XML;
導入com . andyidea . entity . student;
公共類ParserByPULL {
//使用XmlPullParser分析XML文件。
公共靜態列表& lt學生& gtget students(InputStream inStream)拋出Throwable
{
列表& lt學生& gt學生= null
Student mStudent = null
//= = = = = =創建XmlPullParser有兩種方法= = = = = =
//方法1:使用工廠類XmlPullParserFactory。
XmlPullParserFactory pull factory = XmlPullParserFactory . new instance();
XmlPullParser parser = pull factory . newpullparser();
//方法二:使用android提供的實用程序類android.util.Xml。
//XML pull parser parser = XML . newpullparser();
//解析文件輸入流
parser . set input(inStream,“UTF-8”);
//生成第壹個事件
int event type = parser . get event type();
//只要不是文檔結束事件,它就會壹直循環。
while(event type!=XmlPullParser。END_DOCUMENT)
{
開關(事件類型)
{
//觸發開始文檔事件
case XmlPullParser。開始_文檔:
students =新數組列表& lt學生& gt();
打破;
//觸發開始元素事件
case XmlPullParser。開始標記:
//獲取分析器當前指向的元素的名稱。
string name = parser . getname();
如果(“學生”。等於(名稱))
{
//通過解析器獲取id的元素值,並設置學生的id。
mStudent = new Student();
mstudent . setid(parser . get attribute value(0));
}
if(m student!=null)
{
if(“名稱”。等於(名稱))
{
//獲取分析器當前指向的元素的下壹個文本節點的值。
mstudent . setname(parser . next text());
}
如果(“年齡”。等於(名稱))
{
//獲取分析器當前指向的元素的下壹個文本節點的值。
mstudent . setage(new Short(parser . nexttext()));
}
如果(“性”。等於(名稱))
{
//獲取分析器當前指向的元素的下壹個文本節點的值。
mstudent . setsex(parser . next text());
}
}
打破;
//觸發結束元素事件
case XmlPullParser。結束標記:
//
如果(“學生”。等於(parser.getName()))
{
students . add(m student);
mStudent = null
}
打破;
默認值:
打破;
}
event type = parser . next();
}
返校學生;
}