本文实例讲述了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小时内与您取得联系。