XML_PULL解析
一、在Android应用中的XML文件来源
- XmlResourceParser xmlParser = this.getResources().getXml(R.xml.XXX);
b.在res/xml、res/raw目录下:
- InputStream inputStream = this.getResources().openRawResource(R.xml.XXX);
- InputStream inputStream = getResources().getAssets().open(fileName);
d.在应用指定目录下(SDcard,应用data目录等):
- // path路径根据实际项目修改,此次获取SDcard根目录
- String path = Environment.getExternalStorageDirectory().toString();
- File xmlFlie = new File(path+fileName);
- InputStream inputStream = new FileInputStream(xmlFlie);
二、应用
1.获取XmlPullParser对象
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();//先获取XmlPullParserFactory实例
XmlPullParser xmlPullParser = factory.newPullParser();//利用XmlPullParserFactory对象获取XmlPullParser对象
2.载入文件并解析的原理
/*载入文件*/
String s = "xml文档数据";
StringReader sr = new StringReader(s);//将数据转换成流
xmlPullParser.setInput(sr);//将数据放入XmlPullParser对象进行解析
解析原理:
就像有根手指放在文档上,逐步处理START_TAG,END_TAG和END_DOCUENT不同的XML节点事件。
START_TAG:当手指放在标签的头部时
END_TAG:当手指放在标签的尾部时
END_DOCUMENT:当手指到达文章的尾部的时候
3.进行解析并获取解析数据
XmlPullParser解析有几个主要方法(属性值:<div id="" name="">节点的内容</div> id and name就是节点属性值。。。 )
- <?xml version="1.0" encoding="UTF-8"?>
- <persons
- xmlns:yd="http://www.china-mobile.com"
- xmlns:lt="http://www.china-unicome.com">
- some_content
- <person index="1">
- <name>yuanzhifei89</name><age>100</age><married>false</married>
- <!-- 移动号码 --><yd:phone yd:id="amj08102">12345678</yd:phone>
- <!-- 联通号码 --><lt:phone lt:id="cmk35203">87654321</lt:phone>
- Namespace的作用:两个都是phone类型的标签,所以需要指定namespace来确定。
- <![CDATA[<> <div>]]><
- </person>
- </persons>
4.实例
private static final String XML_PEOPLE = "people";
public void parseItems(String xmlData){
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();//创建Xml工厂
XmlPullParser parser = factory.newParser();//创建Xml解析器
StringReader sr = new StringReader(xmlData);//将xml数据转换成reader流
parser.setInput(sr);//将数据放入解析器
int eventType = parser.next();//指针下移,获取回调事件类型
While(eventType != XmlPullParser.END_DOCUMENT){ //得到xml数据最后退出循环
if (eventType == XmlPullParser.START_TAG && XML_PEOPLE.equals(parser.getName())){//事件为文章头部并且标签名为需要标签
String name = parser.getAttributeValue(null,"name")//没有namespace就填null,获取属性为name的值
String weight = parser.getAttributeValue(nuill,"weight")//获取属性为weight的值
}
eventType = parser.next();//指针下移
}
}
XML_PULL解析的更多相关文章
- 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新
本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...
- .NET Core中的认证管理解析
.NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...
- Html Agility Pack 解析Html
Hello 好久不见 哈哈,今天给大家分享一个解析Html的类库 Html Agility Pack.这个适用于想获取某网页里面的部分内容.今天就拿我的Csdn的博客列表来举例. 打开页面 用Fir ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
- Asp.Net WebApi核心对象解析(下篇)
在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...
- 【知识必备】内存泄漏全解析,从此拒绝ANR,让OOM远离你的身边,跟内存泄漏say byebye
一.写在前面 对于C++来说,内存泄漏就是new出来的对象没有delete,俗称野指针:而对于java来说,就是new出来的Object放在Heap上无法被GC回收:而这里就把我之前的一篇内存泄漏的总 ...
- SQL Server 数据加密功能解析
SQL Server 数据加密功能解析 转载自: 腾云阁 https://www.qcloud.com/community/article/194 数据加密是数据库被破解.物理介质被盗.备份被窃取的最 ...
随机推荐
- javascript 高级程序设计学习笔记(面向对象的程序设计)继承
ECMAScript中描述了原型链的概念,原型链是实现继承的主要方法. 实现原型链继承有一种基本模式 function SuperType () { this.property = true; } S ...
- Python中安装numpy,scipy,matplotlib安装方法
这个吧,说简单也简单,说难吧我捣鼓了两天才弄出来,真是头发都急白了.其实只要一个网址就搞定了,嘿嘿 http://www.lfd.uci.edu 这里面有你需要的任何东西,当你运行python imp ...
- windows8开发学习笔记
XAML行列定义 <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> &l ...
- activity的生命周期详解
刚在看mars老师的视频,看到activity的生命周期,就看了一下,总结了一下.下面是各函数的调用时机 为了更清楚的看清楚工作的具体过程,举例如下: ,建立两个activity,一个main,一个a ...
- java+mysql中文乱码问题
乱码问题原因有多种,其中有一种是由于MySQL默认使用 ISO-8859-1 ( 即Latin1 ) 字符集,而JAVA内部使用Unicode编码,因此在JAVA中向MYSQL数据库插入数据时,或者读 ...
- HttpClient---------demo
public class aa { public static void main(String[] args) { // 创建HttpClient实例 HttpClient httpclient = ...
- Sphinx Makefile
# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPT ...
- 封装fastjson为spring mvc的json view
可以将其中的main方法删掉.测试用的.我测试的结果是,jackson比fastjson快. fastjson是1.1.36 jackson是2.2.3 jdk是1.7.40,client cpu是i ...
- POJ 3368 RMQ-ST
一直感觉RMQ水,没自己写过,今天写了一道题,算是完全独立写的,这感觉好久没有了... 一直以来,都是为了亚洲赛学算法,出现了几个问题: 1.学的其实只是怎么用算法,对算法的正确性没有好好理解,或者说 ...
- android 拍照 onCreate() 调用两次的问题
拍照的代码网上都有就不写了!自己找下就ok了! 1 旋转屏幕导致问题! 这种情况很好解决:在androidManifest.xml 中设置activity 添加属性 android:configC ...