androidXMLPullParser讀取xml文件

        由于剛學(xué)Android,用的開發(fā)工具是Android studio,沒(méi)用過(guò)eclipse的那個(gè)開發(fā)Android,所以針對(duì)有些說(shuō)由于2個(gè)IDE的路徑不通導(dǎo)致的文件讀取不到,不做分析(實(shí)際上是沒(méi)法分析eclipse里的),這個(gè)博文只針對(duì)AS用戶。

創(chuàng)新互聯(lián)公司擁有網(wǎng)站維護(hù)技術(shù)和項(xiàng)目管理團(tuán)隊(duì),建立的售前、實(shí)施和售后服務(wù)體系,為客戶提供定制化的成都網(wǎng)站制作、網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、四川聯(lián)通機(jī)房服務(wù)器托管解決方案。為客戶網(wǎng)站安全和日常運(yùn)維提供整體管家式外包優(yōu)質(zhì)服務(wù)。我們的網(wǎng)站維護(hù)服務(wù)覆蓋集團(tuán)企業(yè)、上市公司、外企網(wǎng)站、成都商城網(wǎng)站開發(fā)、政府網(wǎng)站等各類型客戶群體,為全球上千家企業(yè)提供全方位網(wǎng)站維護(hù)、服務(wù)器維護(hù)解決方案。

        我們的資源文件,除了放到res目錄下之外,還可以放在跟java 、res同級(jí)的asserts(新建的)目錄里。

android XMLPullParser讀取xml文件

        今天要解析的這個(gè)xml就是在這個(gè)目錄下的。

首先說(shuō)一下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中可以通過(guò)AssetManager來(lái)獲取,即第一行代碼的方式。也可以通過(guò)第二行的方式獲取這個(gè)輸入流

2、聲明xmlPullParser并給輸入流指明編碼方式。

3、定義一個(gè)xmlpullParser獲取到的事件類型,eventType。

4、開始循環(huán)解析,如果沒(méi)有碰到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è)比較常見(jiàn)的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中
                        //通過(guò)getName()判斷讀到哪里,然后通過(guò)nextText()獲取值,或者通過(guò)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

文章題目:androidXMLPullParser讀取xml文件
標(biāo)題網(wǎng)址:http://muchs.cn/article22/gpppcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)移動(dòng)網(wǎng)站建設(shè)、小程序開發(fā)網(wǎng)站改版、微信小程序全網(wǎng)營(yíng)銷推廣

廣告

聲明:本網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)