程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 在Android體系中解析XML文件的辦法

在Android體系中解析XML文件的辦法

編輯:關於JAVA

在Android體系中解析XML文件的辦法。本站提示廣大學習愛好者:(在Android體系中解析XML文件的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是在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; 
    } 
   
  } 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved