Android开发pool解析xml
xml在开发中的作用不可小觑,很多时候我们都要用到这种文件,所以学习它的解析方式很是必要。
我们都知道java中xml的解析有:dom,SAX,但是Android下我们使用pool解析,是更为方便,而且有专门的api可以使用。
dom:一次加载到内存,生成一个树状结构,消耗的内存较大
SAX:基于事件,速度快,效率高,不能回退。
1,首先我们需要定义出来解析器,它的定义方式,是通过Xml new出来的,这点要记着。
XmlPullParser parser = Xml.newPullParser();
2,然后我们需要,设置xml的文件源,也即初始化解析器,使用的方法如下,同时我们还要设置起编码格式,xml的编码一般为"utf-8",所以第二个参数我们就写成"utf-8",而第一个参数的话,如果我们的xml放在本地的话,我们可以通过类加载器来得到,且其返回类型就是inputstream。
parser.setInput(InputStream inputStream, String inputEncoding)
类加载器得到文件的位置,并返回inputstream。
MainActivity.class.getClassLoader().getResourceAsStream("xml文件路径")
3,初始化解析器后,我们就可以开始了,xml的标签很多,这里呢,我们需要调用的方法是。
int type = parser.getEventType();
我们查看api可知,这里获得的是标签,
比如:(这是系统中的定义)
int START_DOCUMENT = 0;
int END_DOCUMENT = 1;
int START_TAG = 2;
int END_TAG = 3;
从名字我们就能很容易的知道其含义,xml开始与结束的标签,以及一个标签对的开始与结束。
所以我们就可以对获得type与这些标签进行对比,这样我们就可以获取标签的值。
4,解析xml
while (type != XmlPullParser.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG:
if ("infos".equals(parser.getName())) {
// 解析到了全局开始标签。
weatherinfos = new ArrayList<WeatherInfo>();
} else if ("city".equals(parser.getName())) {
weatherinfo = new WeatherInfo();
// 得到id
String id = parser.getAttributeValue(0);
weatherinfo.setId(Integer.parseInt(id));
} else if ("temp".equals(parser.getName())) {
String temp = parser.nextText();
weatherinfo.setTemp(temp);
}
break;
case XmlPullParser.END_TAG:
if ("city".equals(parser.getName())) {
// 一个城市的信息处理完毕。
weatherinfos.add(weatherinfo);
weatherinfo = null;
}
break;
}
type = parser.next();
}
xml的解析后,我们还要保存它的值,所以我就把每次xml解析后的值,放到集合中,
这里要注意几点,
parser.getAttributeValue(0);是得到标签中的id值。
每解析完一次后,我们要把循环往下走,所以type = parser.next();
这样我们就可以解析出xml中的数据了。
作者:Darren
微博:@IT_攻城师
出处:http://www.cnblogs.com/fengtengfei/
Android开发pool解析xml的更多相关文章
- Android开发之获取xml文件的输入流对象
介绍两种Android开发中获取xml文件的输入流对象 第一种:通过assets目录获取 1.首先是在Project下app/src/main目录下创建一个assets文件夹,将需要获取的xml文件放 ...
- Android之Pull解析XML
一.Pull解析方法介绍 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件.Pull解析器的运行方式与SAX解析器相似.它也是事件触发的.Pull解 ...
- Android之DOM解析XML
一.DOM解析方法介绍 DOM是基于树形结构的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树,检索所需数据.分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息 ...
- Android中用PULL解析XML
解析XML的方式有DOM,SAX,PULL,那为什么要在Android中使用PULL解析呢?首先来说一下PULL解析的优点,然后再说一下其他两种解析方式的缺点,答案就清晰可见啦. DOM不适合文档较大 ...
- Android之SAX解析XML
一.SAX解析方法介绍 SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备. SAX解析器是一种基于事件的解析器,事件驱动 ...
- Android使用SAX解析XML(1)
可扩展标记语言XML是一种数据交换格式,允许用户自己定义,适合Web传输,能提供独立于程序的数据.XML在Android中也有广泛的应用,Android解析XML的方法有很多,本文介绍使用SAX(Si ...
- 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题
因为和同学分开做的android软件,现在想整合他做的界面部分,于是拷贝了res和src文件夹的文件,其中包括一个res.menu文件夹中的XML.但是每次将该文件导入到工程总无法自动在R.java中 ...
- Android使用pull解析xml
一.理论准备 Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, ...
- android——使用pull解析xml文件
1.persons.xml 将persons.xml文件放到src目录下.其代码如下: <?xml version='1.0' encoding='UTF-8' standalone='yes' ...
随机推荐
- memcached内存分配
Memcached默认情况下采用了名为Slab Allocator的机制分配.管理内存,最大单个存储对象大小为1M. page:分配给slab的最小内存空间,默认为1M,可以在启动时通过-l参数修改 ...
- Windows使用Nginx+ffmpeg搭建RTMP服务器
简介Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.nginx-rmtp-module是Nginx服务器的流媒体插件.nginx通过rtmp模块提供r ...
- python_time和datetime模块
time和datatime模块 时间相关的操作,时间有三种表示方式: 时间戳 1970年1月1日之后的秒,即:time.time() 格式化的字符串 2019-1-1 ...
- python基础——2(基本数据类型及运算符)
目录 为何数据要区分类型? 一.数字类型 1.整型int 2.浮点型float 二.字符串str 三.列表类型list 四.字典类型 五.布尔类型 运算符的介绍 一.算术运算符 二.比较运算符 三.赋 ...
- iptables之FORWARD转发链
注意:本机路由转发的时候,才配置FORWARD转发链! #iptables –A FORWARD –s 192.168.0.0/24 –j ACCEPT #iptables –A FORWARD –d ...
- json串转成list
List<BaseStaEmpEntity> baseStaEmpEntities = new ArrayList<>(); //json转List<baseStaEmp ...
- jenkins在linux环境搭建需要用到的linux命令
需要用到的linux命令如下: 服务器jdk1.7/usr/java/jdk1.7.0_80 jdk1.8/home/hujb/javaJDK/jdk1.8.0_171保存文件时用 : w ! sud ...
- [luoguP3092] [USACO13NOV]没有找零No Change(状压DP + 二分)
传送门 先通过二分预处理出来,每个硬币在每个商品处最多能往后买多少个商品 直接状压DP即可 f[i]就为,所有比状态i少一个硬币j的状态所能达到的最远距离,在加上硬币j在当前位置所能达到的距离,所有的 ...
- 最近切的两题SCC的tarjan POJ1236 POJ2186
两题都是水题,1236第一问求缩点后入度为0的点数,第二问即至少添加多少条边使全图强连通,属于经典做法,具体可以看白书 POJ2186即求缩点后出度为0的那个唯一的点所包含的点数(即SCC里有多少点) ...
- 【multimap的应用】D. Array Division
http://codeforces.com/contest/808/problem/D #include<iostream> #include<cstdio> #include ...