由于剛學(xué)Android,用的開發(fā)工具是Android studio,沒用過eclipse的那個(gè)開發(fā)Android,所以針對(duì)有些說由于2個(gè)IDE的路徑不通導(dǎo)致的文件讀取不到,不做分析(實(shí)際上是沒法分析eclipse里的),這個(gè)博文只針對(duì)AS用戶。
創(chuàng)新互聯(lián)公司專注于臺(tái)前企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城網(wǎng)站建設(shè)。臺(tái)前網(wǎng)站建設(shè)公司,為臺(tái)前等地區(qū)提供建站服務(wù)。全流程按需搭建網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)我們的資源文件,除了放到res目錄下之外,還可以放在跟java 、res同級(jí)的asserts(新建的)目錄里。
今天要解析的這個(gè)xml就是在這個(gè)目錄下的。
首先說一下xmlpullparser,這個(gè)pull解析是基于事件的模式。比如
讀取到xml的開始聲明內(nèi)容,那么就會(huì)觸發(fā)START_DOCUMENT,返回一個(gè)int類型數(shù)據(jù);
讀取到xml的結(jié)束內(nèi)容,那么觸發(fā)END_DOCUMENT,返回一個(gè)int類型數(shù)據(jù)
讀取到xml的開始標(biāo)簽,返回START_TAG,
讀取到xml的結(jié)束標(biāo)簽,返回END_TAG,
讀取到xml的文本返回TEXT
讀取標(biāo)簽后,可以獲取該標(biāo)簽的屬性值與文本值
下面這個(gè)例子講解的xml在附件中的getWeatherByCityName.xml.
下面開始講步驟:
1、獲取assets里面的資源文件的輸入流。 這里在AS中可以通過AssetManager來獲取,即第一行代碼的方式。也可以通過第二行的方式獲取這個(gè)輸入流
2、聲明xmlPullParser并給輸入流指明編碼方式。
3、定義一個(gè)xmlpullParser獲取到的事件類型,eventType。
4、開始循環(huán)解析,如果沒有碰到END_DOCUMENT,那么就一直往下走;取出節(jié)點(diǎn)是string的tag里的文本內(nèi)容并放入到list里,作為后面處理。
5、一定要注意,要加上eventType=xmlPullParser.next();不然的話循環(huán)會(huì)一直讀取xml的第一個(gè)節(jié)點(diǎn),即START_DOCUMENT而不往下執(zhí)行,導(dǎo)致死循環(huán)。
InputStream inputStream = getAssets().open("getWeatherbyCityName.xml"); // InputStream inputStream = getClass().getClassLoader().getResourceAsStream("assets/"+"getWeatherbyCityName.xml"); XmlPullParser xmlPullParser = Xml.newPullParser(); xmlPullParser.setInput(inputStream,"utf-8"); List<String> infosList=new ArrayList<String>(); int eventType=xmlPullParser.getEventType(); while(eventType!=XmlPullParser.END_DOCUMENT){ if ("string".equals(xmlPullParser.getName())){ String info=xmlPullParser.nextText(); infosList.add(info); } eventType=xmlPullParser.next(); }
下面講一個(gè)比較常見的xml格式的文件讀取里面的內(nèi)容:
這個(gè)xml對(duì)應(yīng)的xml是附件中的info2.xml
需要注意的是xml文件的格式正確。之前由于從網(wǎng)上拷貝了一個(gè)xml文本內(nèi)容,結(jié)果xml莫名的各種紅線,調(diào)試下面的程序時(shí),報(bào)xml格式錯(cuò)誤,就手寫了一個(gè)xml,編譯器不報(bào)錯(cuò)了,才調(diào)試好。
里面講解的StudentBean 只是一個(gè)簡(jiǎn)單的有3個(gè)私有屬性的類,id,name,age,帶上get/set方法
package com.yuanlp.pulldemo2; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Xml; import com.yuanlp.pulldemo2.bean.StudentBean; import org.xmlpull.v1.XmlPullParser; import java.io.InputStream; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); List<StudentBean> list=click(); for(StudentBean student : list){ System.out.println("+++++++++<><>>>>>>>>>>>id是>>>>>>>>>>>>>>>>>>>>>>>>"+student.getId()); System.out.println("+++++++++<><>>>>>>>>>>>年齡是>>>>>>>>>>>>>>>>>>>>>>>>"+student.getAge()); System.out.println("+++++++++<><>>>>>>>>>>>名字是>>>>>>>>>>>>>>>>>>>>>>>>"+student.getName()); } } public List<StudentBean> click(){ try { InputStream inputStream=getAssets().open("info2.xml"); XmlPullParser xmlPullParser= Xml.newPullParser(); xmlPullParser.setInput(inputStream,"utf-8"); StudentBean student=null; List<StudentBean> studentlist=null; int eventType=xmlPullParser.getEventType(); while(eventType!=XmlPullParser.END_DOCUMENT){ switch (eventType){ case XmlPullParser.START_DOCUMENT: studentlist=new ArrayList<StudentBean>(); break; case XmlPullParser.START_TAG: //從這個(gè)start節(jié)點(diǎn)到下一個(gè)end節(jié)點(diǎn),讀取到的屬性都屬于一個(gè)student,所以在此聲明一個(gè)student,并將這個(gè)節(jié)點(diǎn)取到的數(shù)據(jù)放入到這個(gè)student中 //通過getName()判斷讀到哪里,然后通過nextText()獲取值,或者通過getAttributeValue獲取屬性值 String tagName=xmlPullParser.getName(); if (tagName.equalsIgnoreCase("person")){ student=new StudentBean(); student.setId(xmlPullParser.getAttributeValue(null,"id")); }else if (student!=null){ if (tagName.equalsIgnoreCase("name")){ student.setName(xmlPullParser.nextText()); }else if (tagName.equalsIgnoreCase("age")){ student.setAge(xmlPullParser.nextText()); } } break; case XmlPullParser.END_TAG: //結(jié)束標(biāo)簽 //如果讀取到結(jié)束標(biāo)簽,而且這個(gè)結(jié)束標(biāo)簽是person的話,就把student放入到list,并把student置null,方便下個(gè)循環(huán)重新聲明 if (xmlPullParser.getName().equalsIgnoreCase("person")&&student!=null){ //讀完一個(gè)person,可以將他放入到list中 studentlist.add(student); student=null; } } eventType=xmlPullParser.next(); } inputStream.close(); return studentlist; } catch (Exception e) { e.printStackTrace(); } return null; } }附件:http://down.51cto.com/data/2366759
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
本文標(biāo)題:androidXMLPullParser讀取xml文件-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://jinyejixie.com/article44/jedhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、營(yíng)銷型網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷推廣、網(wǎng)站改版、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容