Android編程使用pull方式解析xml格式文件的方法詳解
本文實例講述了Android編程使用pull方式解析xml格式文件的方法。分享給大家供大家參考,具體如下:
上次已經(jīng)說過使用Android sax解析xml,實際上還可以使用pull解析xml.這樣的方式效率也是比較高的。pull不僅可以在Android上使用也可以用在javaee里面,需要的就是pull的jar包。這次的xml也使用上次的那個,如下所示
<?xml version="1.0" encoding="UTF-8"?> <persons> <person id="01"> <name>will</name> <age>21</age> </person> <person id="02"> <name>will2</name> <age>22</age> </person> </persons>
下面就來寫一個解析xml的類,解析的流程如下
(1)取得pull解析器
(2)設(shè)置解析器的輸入流
(3)產(chǎn)生第一個事件
(4)開始解析
(5)解析結(jié)束
package org.lxh.impl; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.lxh.vo.Person; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import android.util.Log; import android.util.Xml; public class Parse2 { public List<Person> getPersons(InputStream in) throws Throwable{ Person p=null; List<Person> persons=null; XmlPullParser parser=Xml.newPullParser(); parser.setInput(in, "UTF-8"); int event=parser.getEventType();//產(chǎn)生第一個事件 while(event!=XmlPullParser.END_DOCUMENT){ //如果不是文檔結(jié)束事件 switch(event){ case XmlPullParser.START_DOCUMENT: persons=new ArrayList<Person>(); //在文檔的開始實例化集合 break; case XmlPullParser.START_TAG: String name=parser.getName();//取得當(dāng)前解析器指向的元素名稱 if("person".equals(name)){ p=new Person(); p.setId(parser.getAttributeValue(0)); } if(p!=null){ if("name".equals(name)){ p.setName(parser.nextText()); //取得當(dāng)前解析器指向的下一個元素的文本節(jié)點 } if("age".equals(name)){ p.setAge(Integer.parseInt(parser.nextText())); } } break; case XmlPullParser.END_TAG: if("person".equals(parser.getName())){ //person標(biāo)簽結(jié)束就把數(shù)據(jù)存入集合 persons.add(p); //p=null; } break; } event=parser.next(); } return persons; } }
這樣的解析比起sax應(yīng)該比較簡單了,單元測試也用昨天那個只是少做了修改。下面看一下效果截圖
PS:這里再為大家提供幾款關(guān)于xml操作的在線工具供大家參考使用:
在線XML/JSON互相轉(zhuǎn)換工具:
http://tools.jb51.net/code/xmljson
在線格式化XML/在線壓縮XML:
http://tools.jb51.net/code/xmlformat
XML在線壓縮/格式化工具:
http://tools.jb51.net/code/xml_format_compress
XML代碼在線格式化美化工具:
http://tools.jb51.net/code/xmlcodeformat
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android操作XML數(shù)據(jù)技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android資源操作技巧匯總》、《Android文件操作技巧匯總》、《Android開發(fā)入門與進(jìn)階教程》、《Android視圖View技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對大家Android程序設(shè)計有所幫助。
相關(guān)文章
Android UI實現(xiàn)底部切換標(biāo)簽fragment
這篇文章主要為大家詳細(xì)介紹了Android UI實現(xiàn)底部切換標(biāo)簽的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12Listview加載的性能優(yōu)化是如何實現(xiàn)的
在android開發(fā)中Listview是一個很重要的組件,它以列表的形式根據(jù)數(shù)據(jù)的長自適應(yīng)展示具體內(nèi)容,用戶可以自由的定義listview每一列的布局,接下來通過本文給大家介紹Listview加載的性能優(yōu)化是如何實現(xiàn)的,對listview性能優(yōu)化相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧2016-01-01Android中ConstraintLayout約束布局的最全詳細(xì)解析
ConstraintLayout是Google在Google?I/O?2016大會上發(fā)布的一種新的布局容器(ViewGroup),它支持以靈活的方式來放置子控件和調(diào)整子控件的大小,下面這篇文章主要給大家介紹了關(guān)于Android中ConstraintLayout約束布局詳細(xì)解析的相關(guān)資料,需要的朋友可以參考下2022-08-08GridView實現(xiàn)桌面圖標(biāo)顯示案例
這篇文章主要為大家詳細(xì)介紹了GridView實現(xiàn)桌面圖標(biāo)顯示案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08Android使用Intent.ACTION_SEND分享圖片和文字內(nèi)容的示例代碼
這篇文章主要介紹了Android使用Intent.ACTION_SEND分享圖片和文字內(nèi)容的示例代碼的實例代碼,具有很好的參考價值,希望對大家有所幫助,一起跟隨小編過來看看吧2018-05-05