android XMLPullParser讀取xml檔案

來源:互聯網
上載者:User

標籤:android 解析xml檔案

        由於剛學Android,用的開發工具是Android studio,沒用過eclipse的那個開發Android,所以針對有些說由於2個IDE的路徑不通導致的檔案讀取不到,不做分析(實際上是沒法分析eclipse裡的),這個博文只針對AS使用者。

        我們的資源檔,除了放到res目錄下之外,還可以放在跟java 、res同級的asserts(建立的)目錄裡。

650) this.width=650;" src="https://s3.51cto.com/wyfs02/M01/99/10/wKiom1lDfiCTkpzdAAAlgKMixsk107.png-wh_500x0-wm_3-wmp_4-s_2846464278.png" title="QQ圖片20170616144452.png" alt="wKiom1lDfiCTkpzdAAAlgKMixsk107.png-wh_50" />

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

首先說一下xmlpullparser,這個pull解析是基於事件的模式。比如

讀取到xml的開始聲明內容,那麼就會觸發START_DOCUMENT,返回一個int類型資料;

讀取到xml的結束內容,那麼觸發END_DOCUMENT,返回一個int類型資料

讀取到xml的開始標籤,返回START_TAG,

讀取到xml的結束標籤,返回END_TAG,

讀取到xml的文本返回TEXT

讀取標籤後,可以擷取該標籤的屬性值與文本值

下面這個例子講解的xml在附件中的getWeatherByCityName.xml.

下面開始講步驟:

1、擷取assets裡面的資源檔的輸入資料流。  這裡在AS中可以通過AssetManager來擷取,即第一行代碼的方式。也可以通過第二行的方式擷取這個輸入資料流

2、聲明xmlPullParser並給輸入資料流指明編碼方式。

3、定義一個xmlpullParser擷取到的事件類型,eventType。

4、開始迴圈解析,如果沒有碰到END_DOCUMENT,那麼就一直往下走;取出節點是string的tag裡的常值內容並放入到list裡,作為後面處理。

5、一定要注意,要加上eventType=xmlPullParser.next();不然的話迴圈會一直讀取xml的第一個節點,即START_DOCUMENT而不往下執行,導致死迴圈。

 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(); }

下面講一個比較常見的xml格式的檔案讀取裡面的內容:

這個xml對應的xml是附件中的info2.xml


        需要注意的是xml檔案的格式正確。之前由於從網上拷貝了一個xml常值內容,結果xml莫名的各種紅線,調試下面的程式時,報xml格式錯誤,就手寫了一個xml,編譯器不報錯了,才調試好。


        裡面講解的StudentBean 只是一個簡單的有3個私人屬性的類,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:                        //從這個start節點到下一個end節點,讀取到的屬性都屬於一個student,所以在此聲明一個student,並將這個節點取到的資料放入到這個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: //結束標籤                        //如果讀取到結束標籤,而且這個結束標籤是person的話,就把student放入到list,並把student置null,方便下個迴圈重新聲明                        if (xmlPullParser.getName().equalsIgnoreCase("person")&&student!=null){                            //讀完一個person,可以將他放入到list中                            studentlist.add(student);                            student=null;                        }                }                eventType=xmlPullParser.next();            }              inputStream.close();            return  studentlist;        } catch (Exception e) {            e.printStackTrace();        }        return null;    }}


本文出自 “YuanGuShi” 部落格,請務必保留此出處http://cm0425.blog.51cto.com/10819451/1939165

android XMLPullParser讀取xml檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.