栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

前言
    在学习Android的framework层源码时,Android大量的使用XmlPullParser来解析xml文件的源码。因此,这里也顺道介绍一下XmlPullParser的使用。

XML
    XML(eXtensible Markup Language)中文名为可扩展标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。
用途
    XML设计用了传送及携带数据信息,不用了表现或展示数据,HTML语言则用了表现数据,所以XML用途的焦点是它说明数据是什么,以及携带数据信息。

  •     丰富文件——自定文件描述并使其更丰富
  •     元数据——描述其它文件或网络资讯
  •     配置文档——描述软件设置的参数

结构
    每个XML文档都由XML序言开始,在前面的代码中第一行就是XML序言,。这一行代码会告诉解析器或浏览器这个文件应该按照XML规则进行解析。但是,根元素的名称是由文档类型定义或XML纲要定义的。

XmlPullParser
    PULL解析xml是基于事件驱动的方式解析XML文件,pull开始解析时,我们可以先通过getEventType()方法获取当前解析事件类型,并且通过next()方法获取下一个解析事件类型。PULL解析器提供了START_document(开始文档)、END_document(结束文档)、START_TAG(开始标签)、END_TAG(结束标签)四种事件解析类型。当处于某个元素时,可以调用getAttributevalue()方法获取属性的值,也可以通过nextText()方法获取本节点的文本值。下面通过一个例子来进行解析。
xml示例文件
    需要解析的xml示例文件代码如下:

   
   
     
      耗子 
      24 
      boy 
     
     
      璐璐 
      28 
      girl 
     
     
      陈善 
      26 
      boy 
     
   

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 getColleagues(String xmlFilePath) { 
      List colleagues = new ArrayList(); 
      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: 
      
     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; 
    } 
   
  } 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/151356.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号