/********************************************************************************************
* author:conowen@大钟
* E-mail:conowen@hotmail.com
* http://blog.youkuaiyun.com/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 遇到文档标签的结束
xrp.nextTag();继续读取下一个标签,和next()基本 一样
下面写一个解析"英语词典.XML",来实现一个android 字典程序。详细解说可以看注释。
效果图: