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

首頁 > 編程 > Java > 正文

在Android系統中解析XML文件的方法

2019-11-26 15:02:29
字體:
來源:轉載
供稿:網友

前言
    在學習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;     }      } 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 罗田县| 武清区| 江孜县| 休宁县| 钟山县| 丰原市| 驻马店市| 环江| 含山县| 县级市| 敦煌市| 连南| 衡南县| 龙州县| 班玛县| 青龙| 自治县| 阿坝县| 湄潭县| 衡水市| 灵山县| 色达县| 潼关县| 成都市| 五大连池市| 尉氏县| 张家口市| 吉林市| 泸州市| 霍林郭勒市| 蒲城县| 伽师县| 分宜县| 大英县| 洞口县| 滦南县| 合水县| 靖宇县| 聂荣县| 正蓝旗| 中方县|