Android基于Pull方式解析xml的方法詳解
本文實(shí)例講述了Android基于Pull方式解析xml的方法。分享給大家供大家參考,具體如下:
Pull解析和Sax解析很相似,都是輕量級(jí)的解析,在Android的內(nèi)核中已經(jīng)嵌入了Pull,所以我們不需要再添加第三方j(luò)ar包來(lái)支持Pull。
Pull解析和Sax解析不一樣的地方有:
(1)pull讀取xml文件后觸發(fā)相應(yīng)的事件調(diào)用方法返回的是數(shù)字
(2)pull可以在程序中控制想解析到哪里就可以停止解析。
來(lái)看看實(shí)例:
book.xml如下:
<?xml version="1.0" encoding="UTF-8"?> <books> <book id="12"> <name>thinking in java</name> <price>85.5</price> </book> <book id="15"> <name>Spring in Action</name> <price>39.0</price> </book> </books>
Pull解析的代碼如下PullParseService.java
import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import android.util.Xml; import com.xtlh.cn.entity.Book; public class PullParseService { public static List<Book> getBooks(InputStream inputStream) throws Exception{ List<Book> books = null; Book book = null; XmlPullParser parser = Xml.newPullParser(); parser.setInput(inputStream, "UTF-8"); int event = parser.getEventType();//產(chǎn)生第一個(gè)事件 while(event!=XmlPullParser.END_DOCUMENT){ switch(event){ case XmlPullParser.START_DOCUMENT://判斷當(dāng)前事件是否是文檔開始事件 books = new ArrayList<Book>();//初始化books集合 break; case XmlPullParser.START_TAG://判斷當(dāng)前事件是否是標(biāo)簽元素開始事件 if("book".equals(parser.getName())){//判斷開始標(biāo)簽元素是否是book book = new Book(); book.setId(Integer.parseInt(parser.getAttributeValue(0)));//得到book標(biāo)簽的屬性值,并設(shè)置book的id } if(book!=null){ if("name".equals(parser.getName())){//判斷開始標(biāo)簽元素是否是name book.setName(parser.nextText()); }else if("price".equals(parser.getName())){//判斷開始標(biāo)簽元素是否是price book.setPrice(Float.parseFloat(parser.nextText())); } } break; case XmlPullParser.END_TAG://判斷當(dāng)前事件是否是標(biāo)簽元素結(jié)束事件 if("book".equals(parser.getName())){//判斷結(jié)束標(biāo)簽元素是否是book books.add(book);//將book添加到books集合 book = null; } break; } event = parser.next();//進(jìn)入下一個(gè)元素并觸發(fā)相應(yīng)事件 }//end while return books; } }
里面使用到的Book.java類
public class Book { private int id; private String name; private float price; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } @Override public String toString(){ return this.id+":"+this.name+":"+this.price; } }
測(cè)試使用的是android的單元測(cè)試,代碼如下:
import java.io.InputStream; import java.util.List; import android.test.AndroidTestCase; import android.util.Log; import com.xtlh.cn.entity.Book; import com.xtlh.cn.service.PullParseService; public class testPullParseService extends AndroidTestCase{ private static final String TAG = "testPullParseService"; public void testPull() throws Exception{ InputStream input = this.getClass().getClassLoader().getResourceAsStream("book.xml"); PullParseService pull = new PullParseService(); List<Book> books = pull.getBooks(input); for(Book book : books){ Log.i(TAG,book.toString()); } } }
要使用android的單元測(cè)試,需要在AndroidManifest.xml文件中加入聲明,AndroidManifest.xml如下:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.xlth.cn.demo" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <uses-library android:name="android.test.runner" /> <activity android:name=".PullParseDemo" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="7" /> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.xlth.cn.demo" android:label="Tests for My App" /> </manifest>
Pull解析可以用于很多場(chǎng)合,例如接受google天氣,rss新聞等。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android操作XML數(shù)據(jù)技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android資源操作技巧匯總》、《Android文件操作技巧匯總》、《Android操作SQLite數(shù)據(jù)庫(kù)技巧總結(jié)》、《Android操作json格式數(shù)據(jù)技巧總結(jié)》、《Android數(shù)據(jù)庫(kù)操作技巧總結(jié)》、《Android編程開發(fā)之SD卡操作方法匯總》、《Android開發(fā)入門與進(jìn)階教程》、《Android視圖View技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android中使用PULL方式解析XML文件深入介紹
- Android 使用Pull方法解析XML文件的方法
- Android中使用pull解析器操作xml文件的解決辦法
- Android使用Pull解析器解析xml文件的實(shí)現(xiàn)代碼
- 實(shí)例解析Android中使用Pull解析器解析XML的方法
- Android編程解析XML方法詳解(SAX,DOM與PULL)
- Android解析XML的三種方式SAX、Pull、Dom
- 詳解Android之解析XML文件三種方式(DOM,PULL,SAX)
- Android XmlPullParser 方式解析 Xml 文檔
- Android編程使用pull方式解析xml格式文件的方法詳解
相關(guān)文章
android跑馬燈出現(xiàn)重復(fù)跳動(dòng)以及不滾動(dòng)問題的解決方法
這篇文章主要介紹了android跑馬燈出現(xiàn)重復(fù)跳動(dòng)以及不滾動(dòng)問題的解決方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09利用Flutter實(shí)現(xiàn)背景圖片毛玻璃效果實(shí)例
Flutter沒有單獨(dú)的模糊處理容器,需要部件層層疊加實(shí)現(xiàn)模糊效果,下面這篇文章主要給大家介紹了關(guān)于利用Flutter實(shí)現(xiàn)背景圖片毛玻璃效果的相關(guān)資料,需要的朋友可以參考下2022-06-06Android貝塞爾曲線初步學(xué)習(xí)第三課 Android實(shí)現(xiàn)添加至購(gòu)物車的運(yùn)動(dòng)軌跡
這篇文章主要為大家詳細(xì)介紹了Android貝塞爾曲線初步學(xué)習(xí)第三課,Android實(shí)現(xiàn)添加至購(gòu)物車的運(yùn)動(dòng)軌跡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03Android開發(fā)中下拉刷新如何實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Android開發(fā)中下拉刷新的實(shí)現(xiàn)方法,感興趣的小伙伴們可以參考一下2016-07-07淺析Android手機(jī)衛(wèi)士關(guān)閉自動(dòng)更新
保存數(shù)據(jù)的四種方式,網(wǎng)絡(luò),廣播提供者,SharedPreferences,數(shù)據(jù)庫(kù)。接下來(lái)通過本文給大家介紹android手機(jī)衛(wèi)士關(guān)閉自動(dòng)更新的相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧2016-04-04Android 阿里云OSS文件上傳的實(shí)現(xiàn)示例
這篇文章主要介紹了Android 阿里云OSS文件上傳的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Android實(shí)現(xiàn)系統(tǒng)的桌面圖標(biāo)文字的雙行顯示效果
這篇文章主要介紹了Android實(shí)現(xiàn)系統(tǒng)的桌面圖標(biāo)文字的雙行顯示效果,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-10-10Android二級(jí)緩存加載圖片實(shí)現(xiàn)照片墻功能
這篇文章主要為大家詳細(xì)介紹了Android二級(jí)緩存加載圖片實(shí)現(xiàn)照片墻功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07