Android学习笔记(16)————Android的XML解析之pull方式

/********************************************************************************************
* author:conowen@大钟
* E-mail:[email protected]
* http://blog.csdn.net/conowen
* 注:本文为原创,仅作为学习交流使用,转载请标明作者及出处。

********************************************************************************************/


1、XML文档简单解说:

首先先看一个XML文档的截取部分:

cupboard CET4-EASY a CET4-EASY abandon CET4-EASY ability CET4-EASY

模型:

< 文档标签> <子标签><标签A>str1<标签A/><标签B>str2<标签B/><子标签/> <子标签><标签A>str1<标签A/><标签B>str2<标签B/><子标签/> <子标签><标签A>str1<标签A/><标签B>str2<标签B/><子标签/> <文档标签/>



在上面的 XML 中,文档标签。文档中的其他的所有子标签都被包含在文档 中。文档标签 有四个 子标签。每一个 子标签有四个节点:, , 以及节点,其中每个节点都包含这个节点的内容。

注意:标签里面的str内容,如果是换行的,解析xml文件之后,打印出来的也是换行的

XML文件下载地址:http://ishare.iask.sina.com.cn/f/20283647.html

2、Android平台的XML解析方案:

Android平台上可以使用以下三种XML解析方式:

2.1、Simple API for XML(SAX)

SAX解析方式是基于事件驱动的。当读到文档标签的开始或者结束时,会有相应的事件,当读到一个子节点的开始标签或者结束标签时也会有相应的事件。当读到某一个子节点的其中一个节点时也会有相应的事件。由于Android平台的事件驱动是基于回调函数的,也就是说遇到上述事件时,会实现一个回调函数的接口。

2.2、Document Object Model(DOM)

DOM解析XML时,会把整个XML文档视作一个节点树,直接把整个节点树读取到内存里面,再进行解析,这样一来优点就是操作简单方便,但是缺点就是对于大体积的XML文档,解析起来机会很慢,而且很耗费资源。

2.3、Android附带的pull解析器

Pull方基本与SAX一样

简而言之,对于大体积的XML文件,最好选用SAX或者Pull方式解析,对于小体积的XML文档,可以选择DOM解析。

3、Pull解析方式详解

注:以下所说的标签包括子标签和子标签里面的所有标签

Pull解析的相关方法:

XmlResourceParser xrp;//定义一个XML资源解析器

XmlResourceParser.START_DOCUMENT 遇到文档标签的开始

XmlResourceParser.END_DOCUMENT 遇到文档标签的结束

XmlPullParser.START_TAG: 遇到标签的开始
XmlPullParser.END_TAG:遇到标签的结束xrp.getName()获取标签的名称xrp.nextText();获取标签里面的内容(str)(不是xrp.gettext();)xrp.next();继续读取下一个标签

xrp.nextTag();继续读取下一个标签,和next()基本 一样

下面写一个解析"英语词典.XML",来实现一个android 字典程序。详细解说可以看注释。

效果图:

/*author:conowen * date:2012.4.1 */ package com.conowen.Dictionary; import android.app.Activity; import android.content.res.XmlResourceParser; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class DictionaryActivity extends Activity { String input = null; String match = null; EditText et = null; Button search = null; Button del = null; TextView display = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); et = (EditText) findViewById(R.id.et); search = (Button) findViewById(R.id.search); del = (Button) findViewById(R.id.del); display = (TextView) findViewById(R.id.tv); search.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub input = et.getText().toString(); // 现在工程的res目录下面新建一个xml文件夹,把cet4.xml拖进去 XmlResourceParser xrp = getResources().getXml(R.xml.cet4);// 定义一个XML资源解析器 try { StringBuilder strbuilder = new StringBuilder(""); while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {// 当还没到XML文档结束时 if (xrp.getEventType() == XmlResourceParser.START_TAG) {// 当遇到开始标签时,包括子标签和子标签里面的所有标签 String tagname = xrp.getName();// 获取标签的名字 if (tagname.equals("word")) {// 取出单词 match = xrp.nextText();// 读取标签里面内容,也就是这个单词 if (match.equals(input)) {// 如果取出来的这个单词和输入的单词相等 xrp.next();// 读取这个下一个标签,也就是翻译 strbuilder.append(xrp.nextText());// 取出翻译 display.setText(strbuilder);// 显示翻译 break; } } } xrp.next();// 读取下一个标签 } } catch (Exception e) { // TODO: handle exception } } }); del.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub display.setText(""); et.setText(""); } }); } }









你可能感兴趣的:(Android学习笔记(16)————Android的XML解析之pull方式)