国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android編程解析XML文件的方法詳解【基于XmlPullParser】

2019-10-22 18:31:19
字體:
來源:轉載
供稿:網友

本文實例講述了Android編程解析XML文件的方法。分享給大家供大家參考,具體如下:

前言

在學習Android的Framework層源碼時,Android大量的使用XmlPullParser來解析xml文件的源碼。因此,這里也順道介紹一下XmlPullParser的使用。

XML

XML(eXtensible Markup Language)中文名為可擴展標記語言。標記指計算機所能理解的信息符號,通過此種標記,計算機之間可以處理包含各種信息的文章等。

用途

XML設計用了傳送及攜帶數據信息,不用了表現或展示數據,HTML語言則用了表現數據,所以XML用途的焦點是它說明數據是什么,以及攜帶數據信息。

豐富文件——自定文件描述并使其更豐富
元數據——描述其它文件或網絡資訊
配置文檔——描述軟件設置的參數

結構

每個XML文檔都由XML序言開始,在前面的代碼中第一行就是XML序言,<?xml version="1.0"?>。這一行代碼會告訴解析器或瀏覽器這個文件應該按照XML規則進行解析。但是,根元素的名稱是由文檔類型定義或XML綱要定義的。

XmlPullParser

PULL解析xml是基于事件驅動的方式解析XML文件,pull開始解析時,我們可以先通過getEventType()方法獲取當前解析事件類型,并且通過next()方法獲取下一個解析事件類型。PULL解析器提供了START_DOCUMENT(開始文檔)、END_DOCUMENT(結束文檔)、START_TAG(開始標簽)、END_TAG(結束標簽)四種事件解析類型。當處于某個元素時,可以調用getAttributeValue()方法獲取屬性的值,也可以通過nextText()方法獲取本節點的文本值。下面通過一個例子來進行解析。

xml示例文件

需要解析的xml示例文件代碼如下:

<?xml version="1.0" encoding="UTF-8"?><colleagues>  <colleague id="1">    <name>耗子</name>    <age>24</age>    <sex>boy</sex>  </colleague>  <colleague id="2">    <name>璐璐</name>    <age>28</age>    <sex>girl</sex>  </colleague>  <colleague id="3">    <name>陳善</name>    <age>26</age>    <sex>boy</sex>  </colleague></colleagues>

XmlPullParser解析器

package com.example.shakedemo;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import android.R.xml;import android.util.Log;import android.util.Xml;public class XmlPullParserHelper {  public static List<Colleague> getColleagues(String xmlFilePath) {    List<Colleague> colleagues = new ArrayList<Colleague>();    FileReader xmlReader = null;    try {      xmlReader = new FileReader(new File(xmlFilePath));    } catch (FileNotFoundException e) {      Log.e("wzy", "Couldn't find xml file " + xmlFilePath);      return colleagues;    }    try {      // 方式1: 使用 Android 提供的android.util.Xml 類獲取 parser 對象      XmlPullParser parser = Xml.newPullParser();      // 方式2: 使用工廠類 XmlPullParserFactory      // XmlPullParserFactory pullFactory =      // XmlPullParserFactory.newInstance();      // XmlPullParser parser = pullFactory.newPullParser();      // 設置文件輸入流      parser.setInput(xmlReader);      // 得到當前事件類型      int eventType = parser.getEventType();      Colleague colleague = null;      while (eventType != XmlPullParser.END_DOCUMENT) {        switch (eventType) {        case XmlPullParser.START_DOCUMENT:          break;        case XmlPullParser.START_TAG:          /**           * 通過getName判斷讀到哪個標簽, 然后通過nextText獲取文本節點值,           * 或者通過getAttributeValue(i)獲取屬性節點值           */          String name = parser.getName();          if ("colleague".equals(name)) {            colleague = new Colleague();            colleague.setId(Integer.parseInt(parser.getAttributeValue(null, "id")));          } else if ("name".equals(name)) {            if (colleague != null) {              colleague.setName(parser.nextText());            }          } else if ("age".equals(name)) {            if (colleague != null) {              colleague.setAge(Integer.parseInt(parser.nextText()));            }          } else if ("sex".equals(name)) {            if (colleague != null) {              colleague.setSex(parser.nextText());            }          }          break;        case XmlPullParser.END_TAG:          if ("colleague".equals(parser.getName()) && colleague != null) {            colleagues.add(colleague);            colleague = null;          }          break;        }        eventType = parser.next();      }      xmlReader.close();    } catch (XmlPullParserException e) {      // Do nothing    } catch (IOException e) {      // Do nothing    }    return colleagues;  }}

其中,colleague類的定義比較簡單,代碼如下:

package com.example.shakedemo;public class Colleague {  private int id;  private int age;  private String name;  private String sex;  public int getId() {    return id;  }  public void setId(int id) {    this.id = id;  }  public int getAge() {    return age;  }  public void setAge(int age) {    this.age = age;  }  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }  public String getSex() {    return sex;  }  public void setSex(String sex) {    this.sex = sex;  }  @Override  public String toString() {    return "ID is " + id + ", Name is " + name + ", Sex is " + sex;  }}

 

希望本文所述對大家Android程序設計有所幫助。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 商都县| 新丰县| 崇文区| 丹阳市| 大渡口区| 潢川县| 英德市| 岑巩县| 舒兰市| 申扎县| 措美县| 搜索| 封丘县| 兴和县| 武安市| 阜城县| 商都县| 托克托县| 察雅县| 封丘县| 徐汇区| 渭源县| 平定县| 牟定县| 襄汾县| 平江县| 湘潭市| 贵定县| 板桥市| 金湖县| 凉城县| 天水市| 永胜县| 师宗县| 南江县| 鄂伦春自治旗| 普格县| 保康县| 通辽市| 万盛区| 探索|