溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中怎么解析XML文件

發(fā)布時間:2021-06-26 16:47:59 來源:億速云 閱讀:126 作者:Leah 欄目:移動開發(fā)

本篇文章給大家分享的是有關Android中怎么解析XML文件,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

XML

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

用途

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

豐富文件——自定文件描述并使其更豐富
元數(shù)據(jù)——描述其它文件或網(wǎng)絡資訊
配置文檔——描述軟件設置的參數(shù)

結(jié)構(gòu)

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

XmlPullParser

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

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獲取文本節(jié)點值,
           * 或者通過getAttributeValue(i)獲取屬性節(jié)點值
           */
          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中怎么解析XML文件,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI