全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android编程解析XML文件的方法详解【基于XmlPullParser】

本文实例讲述了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;
  }
}

PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:

在线XML/JSON互相转换工具:
http://tools./code/xmljson

在线格式化XML/在线压缩XML
http://tools./code/xmlformat

XML在线压缩/格式化工具:
http://tools./code/xml_format_compress

XML代码在线格式化美化工具:
http://tools./code/xmlcodeformat

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android操作XML数据技巧总结》、《Android编程之activity操作技巧总结》、《Android资源操作技巧汇总》、《Android文件操作技巧汇总》、《Android开发入门与进阶教程》、《Android视图View技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。


# Android  # 编程  # 解析  # XML文件  # XmlPullParser  # Android编程使用pull方式解析xml格式文件的方法详解  # Android XmlPullParser 方式解析 Xml 文档  # 详解Android之解析XML文件三种方式(DOM  # PULL  # SAX)  # Android解析XML(PULL)展示到ListView  # Android平台基于Pull方式对XML文件解析与写入方法详解  # 实例解析Android中使用Pull解析器解析XML的方法  # android4.0混淆XmlPullParser报错原因分析解决  # Android pull解析xml的实现方法  # 文档  # 用了  # 操作技巧  # 进阶  # 相关内容  # 是由  # 感兴趣  # 我们可以  # 可以通过  # 给大家  # 使其  # 所能  # 四种  # 在前面  # 介绍一下  # 更多关于  # 此种  # 所述  # 读到  # 都由 


相关文章: 如何快速生成橙子建站落地页链接?  如何将凡科建站内容保存为本地文件?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  婚礼视频制作网站,学习*后期制作的网站有哪些?  股票网站制作软件,网上股票怎么开户?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  如何在Tomcat中配置并部署网站项目?  Android使用GridView实现日历的简单功能  建站主机SSH密钥生成步骤及常见问题解答?  建站之星安装后如何自定义网站颜色与字体?  网站制作说明怎么写,简述网页设计的流程并说明原因?  c++怎么用jemalloc c++替换默认内存分配器【性能】  动图在线制作网站有哪些,滑动动图图集怎么做?  建站之家VIP精选网站模板与SEO优化教程整合指南  再谈Python中的字符串与字符编码(推荐)  如何访问已购建站主机并解决登录问题?  建站之星与建站宝盒如何选择最佳方案?  ,在苏州找工作,上哪个网站比较好?  英语简历制作免费网站推荐,如何将简历翻译成英文?  如何快速搭建个人网站并优化SEO?  如何选择最佳自助建站系统?快速指南解析优劣  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  官网网站制作腾讯审核要多久,联想路由器newifi官网  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  网站网页制作专业公司,怎样制作自己的网页?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  广州美橙建站如何快速搭建多端合一网站?  实例解析angularjs的filter过滤器  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  ,sp开头的版面叫什么?  制作网站的公司有哪些,做一个公司网站要多少钱?  南宁网站建设制作定制,南宁网站建设可以定制吗?  如何通过FTP服务器快速搭建网站?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  北京网站制作的公司有哪些,北京白云观官方网站?  油猴 教程,油猴搜脚本为什么会网页无法显示?  如何通过西部建站助手安装IIS服务器?  如何生成腾讯云建站专用兑换码?  如何选择PHP开源工具快速搭建网站?  制作网站外包平台,自动化接单网站有哪些?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  小型网站建站如何选择虚拟主机?  临沂网站制作企业,临沂第三中学官方网站?  建站之星代理如何获取技术支持?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。