android之Xml的高效解析方式——pull
2017-02-14 12:09
417 查看
我们知道,解析XML在各个平台使用也非常广泛,android也是一样,经常会涉及到XML的解析读取,解析方式主要有三种:SAX解析器、DOM解析器和PULL解析器。
SAX解析器:它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的,也就是ContentHandler为重要核心,解析过程中每遇到一个事件源,只有调用事件解析器才能得到相应的处理;不过它的优点主要是解析速度快,占用内存少。非常适合在Android移动设备中使用;
DOM解析器:dom解析的原理是基于树形的结构和信息数据集合,将文件分为独立的元素、属性和注释等,然后以节点树的形式在内存中对XML文件进行表示,利用DOM中的对象,可以对XML文档进行读取、搜索、修改、添加和删除等操作。
PULL解析器:PULL解析器的运行方式和SAX类似,都是基于事件的模式。不同的是,在PULL解析过程中,我们需要自己获取产生的事件然后做相应的操作,而不像SAX那样由处理器触发一种事件的方法,执行我们的代码。PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部在解析各种XML时也是用PULL解析器。
接下来我们重点了解一下PULL解析器的简单使用方式:
首先我们在assets中放入一个xml文件:
接下来我们就通过pull的方式读取xml中几个控件的ID名称,这里要注意的是,调用pullParser.getAttributeValue()时,通常我们可以根据传入的数字下表可以取出标签的属性值,也就是
运行效果如下:
SAX解析器:它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的,也就是ContentHandler为重要核心,解析过程中每遇到一个事件源,只有调用事件解析器才能得到相应的处理;不过它的优点主要是解析速度快,占用内存少。非常适合在Android移动设备中使用;
DOM解析器:dom解析的原理是基于树形的结构和信息数据集合,将文件分为独立的元素、属性和注释等,然后以节点树的形式在内存中对XML文件进行表示,利用DOM中的对象,可以对XML文档进行读取、搜索、修改、添加和删除等操作。
PULL解析器:PULL解析器的运行方式和SAX类似,都是基于事件的模式。不同的是,在PULL解析过程中,我们需要自己获取产生的事件然后做相应的操作,而不像SAX那样由处理器触发一种事件的方法,执行我们的代码。PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部在解析各种XML时也是用PULL解析器。
接下来我们重点了解一下PULL解析器的简单使用方式:
首先我们在assets中放入一个xml文件:
接下来我们就通过pull的方式读取xml中几个控件的ID名称,这里要注意的是,调用pullParser.getAttributeValue()时,通常我们可以根据传入的数字下表可以取出标签的属性值,也就是
pullParser.getAttributeValue(1),但是如果你想要根据属性名称获取属性值的话,就得写成:
pullParser.getAttributeValue(null, "id")。ok,下面我们直接看完整的代码演示:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv_text = (TextView) findViewById(R.id.tv_text); try { //得到XML解析器 XmlPullParser pullParser = Xml.newPullParser(); InputStream is = getAssets().open("activity_main.xml"); pullParser.setInput(is, "utf-8"); //得到事件类型 int eventType = pullParser.getEventType(); //文档的末尾 //遍历内部的内容 StringBuilder stringBuilder = new StringBuilder(); while (eventType != XmlPullParser.END_DOCUMENT) { String name = pullParser.getName(); if (!TextUtils.isEmpty(name)) if (eventType == XmlPullParser.START_TAG) { String attributeValue = pullParser.getAttributeValue(null, "id"); attributeValue = attributeValue.substring(attributeValue.indexOf("/") + 1, attributeValue.length()); stringBuilder.append("name===="); stringBuilder.append(name); stringBuilder.append("\t\tid===="); stringBuilder.append(attributeValue); stringBuilder.append("\n\n"); } eventType = pullParser.next();//读取下一个标签 } tv_text.setText(stringBuilder.toString()); } catch (Exception e) { e.printStackTrace(); } } }
运行效果如下:
相关文章推荐
- android解析XML总结(SAX、Pull、Dom三种方式)
- Android XML解析Pull方式———解析网络数据示例
- android解析XML总结(SAX、Pull、Dom三种方式)
- Android 创建与解析XML(四)—— Pull方式
- android解析XML总结(SAX、Pull、Dom三种方式)附带DOM4J、JDOM
- Android XML解析学习——Pull方式
- android解析XML的三种方式(DOM,SAX,PULL)
- Android XML解析学习——Pull方式
- Android XML解析学习——Pull方式
- Hello Android - PULL方式解析XML
- Android学习笔记(16)————Android的XML解析之pull方式
- android使用pull的方式解析xml
- Android 创建与解析XML(四)—— Pull方式
- Android学习指南之三十一:Android中使用SAX和pull方式解析XML
- Android中xml解析方式(SAX,PULL原理)
- Android Pull方式解析XML
- Android解析XML三种方式(PULL、SAX、DOM)
- Android解析XML三种方式(PULL、SAX、DOM)
- Android 创建与解析XML(四)—— Pull方式
- Android 创建与解析XML(四)—— Pull方式