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

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


1、XML文档简单解说:

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

<wordbook><item>    <word>cupboard</word>    <trans><![CDATA[n. 食橱;碗柜]]></trans>    <phonetic><![CDATA[['kʌbəd]]]></phonetic>    <tags>CET4-EASY</tags></item><item>    <word>a</word>    <trans><![CDATA[art. 一;任一;每一  a : 朱 FORM A: 普惠证|普惠制产地证|惠制原产地证明书 many a: 许多的|一个又一个的|很多]]></trans>    <phonetic><![CDATA[[ei]]]></phonetic>    <tags>CET4-EASY</tags></item><item>    <word>abandon</word>    <trans><![CDATA[n. 狂热;放任 vt. 遗弃;放弃 abandon: 放弃|确认期权失效|委付 Call abandon: 呼叫中途挂机 abandon  v: 放弃]]></trans>    <phonetic><![CDATA[[ə'bændən]]]></phonetic>    <tags>CET4-EASY</tags></item><item>    <word>ability</word>    <trans><![CDATA[n. 能力,能耐;才能 Ability: 力|能力|本领 encapsulating ability: 包被抑制性 limited ability: 有限能力]]></trans>    <phonetic><![CDATA[[ə'biliti]]]></phonetic>    <tags>CET4-EASY</tags></item>
</wordbook>

模型:

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


在上面的 XML 中,文档标签是 <wordbook>。文档中的其他的所有子标签都被包含在文档<bookstore> 中。文档标签 <wordbook> 有四个 <item>子标签。每一个 <item>子标签有四个节点:<word>, <trans>, <phonetic> 以及<tags>节点,其中每个节点都包含这个节点的内容。

注意:标签里面的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. */@Overridepublic 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() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubinput = 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();// 读取这个下一个标签,也就是<trans>翻译strbuilder.append(xrp.nextText());// 取出翻译display.setText(strbuilder);// 显示翻译                                                                        break;}}}xrp.next();// 读取下一个标签}} catch (Exception e) {// TODO: handle exception}}});del.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubdisplay.setText("");et.setText("");}});}}


   

更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. android解析XML
  3. android init.rc init.%PRODUCT%.rc 解析命令
  4. Android(安卓)警告"unused DT entry“ 解析
  5. android之sax解析xml文件 .
  6. Android(安卓)JSON字符串解析和构建 .
  7. android Universal Image Loader for Android(安卓)说明文档 (1)
  8. android使用pull解析器读写xml文件…
  9. porting iperf to Android(安卓)platform

随机推荐

  1. 如何定制化Android的播放器(VideoViewEx.
  2. Android 日期工具类DateUtil
  3. Android 调用系统相机回调后的处理
  4. Android 4.0 UI for Tablet and Handset
  5. Android系统进程Zygote启动过程的源代码
  6. android TV盒子开发遥控器按键的监听
  7. IllegalStateException,PatternSyntaxExce
  8. 彻底解决Android中文乱码
  9. Android输入框布局如何随键盘变化
  10. android 计时器