您的位置:首页 > 移动开发 > Android开发

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()时,通常我们可以根据传入的数字下表可以取出标签的属性值,也就是
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();
}
}
}


运行效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xml