最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Android系統(tǒng)中解析XML文件的方法

 更新時間:2015年07月31日 10:33:16   作者:低調小一  
這篇文章主要介紹了在Android系統(tǒng)中解析XML文件的方法,利用Java寫成的XmlPullParser解析器,需要的朋友可以參考下

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

XML
    XML(eXtensible Markup Language)中文名為可擴展標記語言。標記指計算機所能理解的信息符號,通過此種標記,計算機之間可以處理包含各種信息的文章等。
用途
    XML設計用了傳送及攜帶數據信息,不用了表現或展示數據,HTML語言則用了表現數據,所以XML用途的焦點是它說明數據是什么,以及攜帶數據信息。

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

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

XmlPullParser
    PULL解析xml是基于事件驅動的方式解析XML文件,pull開始解析時,我們可以先通過getEventType()方法獲取當前解析事件類型,并且通過next()方法獲取下一個解析事件類型。PULL解析器提供了START_DOCUMENT(開始文檔)、END_DOCUMENT(結束文檔)、START_TAG(開始標簽)、END_TAG(結束標簽)四種事件解析類型。當處于某個元素時,可以調用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; 
    } 
   
  } 

相關文章

  • Java并發(fā)編程之常用的輔助類詳解

    Java并發(fā)編程之常用的輔助類詳解

    這篇文章主要給大家介紹了關于Java并發(fā)編程之常用的輔助類的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • HashMap工作原理_動力節(jié)點Java學院整理

    HashMap工作原理_動力節(jié)點Java學院整理

    這篇文章主要介紹了HashMap工作原理_動力節(jié)點Java學院整理,需要的朋友可以參考下
    2017-04-04
  • 淺析非對稱加密在接口參數中的實現

    淺析非對稱加密在接口參數中的實現

    接口層做數據加密應該算是老生常談的一件事了,業(yè)界用的比較多的,不外乎是對稱加密,非對稱加密以及兩者的結合。本文就來聊聊非對稱加密在接口參數中的實現,希望對大家有所幫助
    2023-02-02
  • springboot項目中后端接收前端傳參的方法示例詳解

    springboot項目中后端接收前端傳參的方法示例詳解

    這篇文章主要介紹了springboot項目中一些后端接收前端傳參的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • 一篇文章帶你入門Java多線程

    一篇文章帶你入門Java多線程

    這篇文章主要介紹了java多線程編程實例,分享了幾則多線程的實例代碼,具有一定參考價值,加深多線程編程的理解還是很有幫助的,需要的朋友可以參考下
    2021-08-08
  • 詳解JVM的分代模型

    詳解JVM的分代模型

    這篇文章主要介紹了JVM的分代模型的相關資料,幫助大家更好的理解和學習Java虛擬機相關知識,感興趣的朋友可以了解下
    2020-10-10
  • SpringBoot之核心依賴和自動配置方式

    SpringBoot之核心依賴和自動配置方式

    這篇文章主要介紹了SpringBoot之核心依賴和自動配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Javafx利用fxml變換場景的實現示例

    Javafx利用fxml變換場景的實現示例

    本文主要介紹了Javafx利用fxml變換場景的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-07-07
  • Java使用itextpdf實現PDF轉文本以及轉圖片

    Java使用itextpdf實現PDF轉文本以及轉圖片

    PDF轉文本的插件常用的有pdfbox ,itextpdf 和 spire.pdf,本文主要介紹如何使用itextpdf實現PDF轉文本以及轉圖片,需要的可以參考一下
    2025-01-01
  • Springboot整合MongoDB的Docker開發(fā)教程全解

    Springboot整合MongoDB的Docker開發(fā)教程全解

    這篇文章主要介紹了Springboot整合MongoDB的Docker開發(fā),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2020-07-07

最新評論

张北县| 容城县| 砀山县| 平邑县| 澜沧| 蒙阴县| 武功县| 宣威市| 东乌珠穆沁旗| 紫阳县| 仪征市| 武宁县| 鲁山县| 平顺县| 城市| 安义县| 新田县| 肥西县| 龙海市| 新河县| 新郑市| 邮箱| 贵阳市| 蚌埠市| 牟定县| 明星| 伊春市| 永寿县| 普格县| 富民县| 伊宁市| 合肥市| 石城县| 长岛县| 巢湖市| 保靖县| 蓬溪县| 金山区| 鹤岗市| 云龙县| 容城县|