Android之PULL解析XML

來源:互聯網
上載者:User

今天我們一起通過一個小例子來學習一下使用PULL解析器解析XML檔案。

(1)首先我們放一個檔案名稱為beauties.xml的XML檔案到assets目錄下,檔案內容如下:

                  範冰冰          28                      楊冪          23            

然後在src目錄下寫一個與XML中節點(Node)相對應的類Beauty,其內容如下:

package com.pulltest;public class Beauty {//美女姓名private String name;//美女年齡private String age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}@Overridepublic String toString() {return "美女資料 [年齡=" + age + ", 姓名=" + name + "]";}}

(2)在src目錄下寫一個介面IBeautyParser,其內容如下:

package com.pulltest;import java.io.InputStream;import java.util.List;public interface IBeautyParser {/** *  * 解析輸入資料流,擷取Beauty列表 * @param is * @return * @throws Exception */public List parse(InputStream is) throws Exception;/** *  * 序列化Beauty對象集合,得到XML形式的字串 * @param beauties * @return * @throws Exception */public String serialize(List beauties) throws Exception;}

在src目錄下寫一個上面介面的實作類別BeautyParserImpl,其內容如下,代碼已經詳細注釋:

package com.pulltest;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import android.util.Xml;public class BeautyParserImpl implements IBeautyParser{@Overridepublic List parse(InputStream is) throws Exception {List mList = null;Beauty beauty = null;// 由android.util.Xml建立一個XmlPullParser執行個體XmlPullParser xpp = Xml.newPullParser();// 設定輸入資料流 並指明編碼方式xpp.setInput(is,"UTF-8");// 產生第一個事件int eventType = xpp.getEventType();while (eventType != XmlPullParser.END_DOCUMENT){ switch (eventType) {             // 判斷當前事件是否為文檔開始事件             case XmlPullParser.START_DOCUMENT:                 mList = new ArrayList(); // 初始化books集合                 break;             // 判斷當前事件是否為標籤元素開始事件             case XmlPullParser.START_TAG:                 if (xpp.getName().equals("beauty")) { // 判斷開始標籤元素是否是book                     beauty = new Beauty();                 } else if (xpp.getName().equals("name")) {                     eventType = xpp.next();//讓解析器指向name屬性的值                     // 得到name標籤的屬性值,並設定beauty的name                     beauty.setName(xpp.getText());                 } else if (xpp.getName().equals("age")) { // 判斷開始標籤元素是否是book                     eventType = xpp.next();//讓解析器指向age屬性的值                     // 得到age標籤的屬性值,並設定beauty的age                     beauty.setAge(xpp.getText());                 }                  break;               // 判斷當前事件是否為標籤元素結束事件             case XmlPullParser.END_TAG:                 if (xpp.getName().equals("beauty")) { // 判斷結束標籤元素是否是book                     mList.add(beauty); // 將book添加到books集合                     beauty = null;                 }                 break;             }             // 進入下一個元素並觸發相應事件             eventType = xpp.next();         }         return mList;}@Overridepublic String serialize(List beauties) throws Exception {// TODO Auto-generated method stubreturn null;}}

(3) 在layout目錄下建立一個布局檔案pulltest.xml,其內容如下:

    

在src目錄下的Activity內容如下:

package com.pulltest;import java.io.InputStream;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;import com.example.pulltest.R;public class PullTestActivity extends Activity{//裝載Beauty類型的鏈表,其內容由XML檔案解析得到private List beautyList;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.pulltest);try {//通過assertmanager的open方法擷取到beauties.xml檔案的輸入資料流InputStream is = this.getAssets().open("beauties.xml");//初始化自訂的實作類別BeautyParserImplBeautyParserImpl pbp = new BeautyParserImpl();//調用pbp的parse()方法,將輸入資料流傳進去解析,返回的鏈表結果賦給beautyListbeautyList = pbp.parse(is);} catch (Exception e) {e.printStackTrace();}setupViews();}/** * 將資料顯示到手機介面上 */private void setupViews(){String result = "";for (Beauty b : beautyList) {              result += b.toString();          }          TextView textView = (TextView) findViewById(R.id.textView);          textView.setText(result); }}

我們右鍵運行一下android project,結果如下:

Android之PULL解析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.