Android中XML数据解析

转载请注明出处:http://blog.csdn.net/yegongheng/article/details/38296207


XML初步

       今天我们来学习另一种非常重要的数据交换格式-XML。XML(Extensible Markup Language的缩写,意为可扩展的标记语言),它是一种元标记语言,即定义了用于定义其他特定领域有关语义的、结构化的标记语言,这些标记语言将文档分成许多部件并对这些部件加以标识。XML 文档定义方式有:文档类型定义(DTD)和XML Schema。DTD定义了文档的整体结构以及文档的语法,应用广泛并有丰富工具支持。XML Schema用于定义管理信息等更强大、更丰富的特征。XML能够更精确地声明内容,方便跨越多种平台的更有意义的搜索结果。它提供了一种描述结构数据的格式,简化了网络中数据交换和表示,使得代码、数据和表示分离,并作为数据交换的标准格式,因此它常被称为智能数据文档。
      由于XML具有很强的扩展性,致使它需要很强的基础规则来支持扩展,所以在编写XML文件时,我们应该严格遵守XML的语法规则,一般XML语法有如下规则:(1)起始和结束的标签相匹配;(2)嵌套标签不能相互嵌套;(3)区分大小写。下面是给出了一个编写错误的XML文件以及对其的错误说明,如下:

本文只是对XML做了个简单的介绍,要想学习更多有关XML知识,可以访问如下网站: http://bbs.xml.org.cn/index.asp。
XML在实际应用中比较广泛,Android也不例外,作为承载数据的重要角色,如何读写XML称为Android开发中一项重要的技能。

Android中XML数据解析使用实例

       在Android开发中,较为常用的XML解析器有SAX解析器、DOM解析器和PULL解析器,下面我们将会一一学习如何使用这些XML解析器。那在介绍这几种XML解析器过程中,我们依然是要通过一个实例来学习它们的实际开发方法,下面是我们Demo实例的程序列表清单,如下:
   
         图1-1 客户端                                          图1-2 服务器端
来整理下我们实现的Demo实例思路:客户端通过网络请求读取服务器端的person.xml,person.xml文件中的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
    <person id="1">
		<name>Transformers First</name>
		<height>7</height>
		<imageurl>imagefile/transformers_one.png</imageurl>
	</person>
	<person id="2">
		<name>Transformers second</name>
		<height>4</height>
		<imageurl>imagefile/transformers_two.png</imageurl>
	</person>
	 <person id="3">
		<name>Transformers third</name>
		<height>8.5</height>
		<imageurl>imagefile/transformers_three.png</imageurl>
	</person>
	<person id="4">
		<name>Transformers fourth</name>
		<height>14.5</height>
		<imageurl>imagefile/transformers_four.png</imageurl>
	</person>
	<person id="5">
		<name>Transformers fifth</name>
		<height>27.5</height>
		<imageurl>imagefile/transformers_five.png</imageurl>
	</person>
	<person id="6">
		<name>Transformers Sixth</name>
		<height>8.5</height>
		<imageurl>imagefile/transformers_six.png</imageurl>
	</person>
	<person id="7">
		<name>Transformers Seventh</name>
		<height>5</height>
		<imageurl>imagefile/transformers_seven.png</imageurl>
	</person>
	<person id="8">
		<name>Transformers Eighth</name>
		<height>12.5</height>
		<imageurl>imagefile/transformers_eight.png</imageurl>
	</person>
</persons>
接着 将获取到的person.xml的文件流信息分别使用SAX、DOM和PULL解析方式解析成Java对象,然后将解析后获取到的Java对象信息以列表的形式展现在客户端,思路很简单吧。
Demo实例工程的下载地址:
好了,基本了解了Demo实例的整体思路后,接下来我们将学习如何具体实现它们。

SAX解析XML文件实例

       SAX(Simple For XML)是一种基于事件的解析器,它的核心是事件处理模式,它主要是围绕事件源和事件处理器来工作的。当事件源产生事件后,会调用事件处理器中相应的方法来处理一个事件,那在事件源调用对应的方法时也会向对应的事件传递一些状态信息,以便我们根据其状态信息来决定自己的行为。
      接下来我们将具体地学习一下SAX解析工作的主要原理:在读取XML文档内容时,事件源顺序地对文档进行扫描,当扫描到文档的开始与结束(Document)标签、节点元素的开始与结束(Element)标签时,直接调用对应的方法,并将状态信息以参数的形式传递到方法中,然后我们可以依据状态信息来执行相关的自定义操作。为了更好的理解SAX解析的工作原理,我们结合具体的代码来更深入的理解下,代码如下:
/**
 * SAX解析类
 * @author AndroidLeaf
 */
public class MyHandler extends DefaultHandler {

	//当开始读取文档标签时调用该方法
	@Override
	public void startDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.startDocument();
	}

	//当开始读取节点元素标签时调用该方法
	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		// TODO Auto-generated method stub
		super.startElement(uri, localName, qName, attributes);
		//do something
	}

	//当读取节点元素的子类信息时调用该方法
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		// TODO Auto-generated method stub
		super.characters(ch, start, length);
		//do something
	}
	
	//当结束读取节点元素标签时调用该方法
	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		// TODO Auto-generated method stub
		super.endElement(uri, localName, qName);
		//do something
	}
	
	//当结束读取文档标签时调用该方法
	@Override
	public void endDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.endDocument();
		//do something
	}

}
首先我们先认识一个重要的类--DefaultHandler,该类是XML解析接口(EntityResolver, DTDHandler, ContentHandler, ErrorHandler)的缺省实现,在通常情况下,为应用程序扩展DefaultHandler并覆盖相关的方法要比直接实现这些接口更容易。接着重写startDocument(),startElement(),characters(),endElement和endDocument()五个方法,这些方法会在事件源(在org.xml.sax包中的XMLReader,通过parser()产生事件)读取到不同的XML标签所产生事件时调用。那我们开发时只要在这些方法中实现我们的自定义操作即可。下面总结罗列了一些使用SAX解析时常用的接口、类和方法:

事件处理器名称

事件处理器处理的事件

ContentHandler

XML文档的开始与结束;

XML文档节点元素的开始与结束,接收字符数据,跳过实体,接收元素内容中可忽略的空白等。

DTDHandler

处理DTD解析时产生的相应事件

ErrorHandler

处理XML文档时产生的错误

EntityResolver

处理外部实体

方法名称

方法说明

startDocument()

用于处理文档解析开始时间

startElement(String uri,String localName,String qName

 Attributes attributes)

处理元素开始时间,从参数中可以获取元素所在空间的URL,元素名称,属性列表等信息。

characters(char[] ch,int start,int length)

处理元素的字符内容,从参数中可以获得内容

endElement(String uri,String localName,String qName)

处理元素结束时间,从参数中可以获取元素所在空间的URL,元素名称等信息。

endDocument()

用于处理文档解析的结束事件







最低0.47元/天 解锁文章
android解析xml例子
02-06
android解析xml例子,包含SAM、DOM、PULL三种解析方式Demo
android解析xml实例
11-17
android解析xml实例
Android学习(48) -- 获取xml文件并解析.
idiandi的博客
05-10 1085
1、根据xml的格式创建JavaBean public class News { private String title; private String detail; private String comment; private String imageUrl; @Override public String toString() { return "News [ti
AndroidXml解析实战
Nickolas的专栏
05-15 270
Android,常见的XML解析器分别为DOM解析器、SAX解析器和PULL解析器,下面,我将一一向大家详细介绍。DOM解析器:DOM是基于树形结构的的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树、检索所需数据。分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息。Android完全支持DOM 解析。利用DOM的对象,可以对XML文档进行读取、搜索、修
AndroidXML文件解析
Mr_Dave的博客
10-10 505
1、文件目录 2、weather.xml 3、解析xml文件源码 (1)channel.java文件 public class Channel { private String id; private String city; private String temp; private String wind;
Android XML数据解析简单示例
09-04
主要介绍了Android XML数据解析简单示例,本文直接给出了实现代码,需要的朋友可以参考下
Android读取XML文件数据
01-04
本文实例为大家分享了Android读取XML文件数据的具体代码,供大家参考,具体内容如下 读取XML存储的数据。将xmlfile.xml存放在assets文件夹。在activity_main.xml创建一个textview,用来显示读取到的数据。 ...
详解Android解析XML的方法
01-05
作为承载数据的一个重要角色,如何读写XML成为Android开发一项重要的技能。今天就由我向大家介绍一下在Android平台下几种常见的XML解析和创建的方法。 在Android,常见的XML解析器分别为SAX解析器、DOM解析器和...
Android - 读取XML文件数据
weixin_33825683的博客
05-01 804
读取XML存储的数据。将xmlfile.xml存放在assets文件夹。在activity_main.xml创建一个textview,用来显示读取到的数据XML文件内容如下:xmlfile.xml <?xml version="1.0" encoding="UTF-8"?> <Languages cat="it">...
Android端获取XML数据解析成List集合显示
10-19
参照文档:http://blog.csdn.net/sinat_29398599/article/details/52858725 (Android部分)
Android解析XML数据和Json数据
小小桐的专栏
10-20 538
Android数据解析
android针对xml文件进行读取
TTHHVV的博客
02-20 1699
XML 1 每个XML文档都由XML序言开始,在前面的代码的第一行便是XML序言,<?xml version="1.0"?> 2 任何的起始标签都必须有一个结束标签。 3 标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签。 4 标签如果有属性,属性值必须加双引号。 XML文档读取 “XML的内容都是结点”,这句话的意思是:XML文档,无论是 <> </> 符号的里面的内容(属性)、 ...
Android xml文件里读取string array
热门推荐
开发简记
07-06 1万+
String Array An array of strings that can be referenced from the application. Note: A string array is a simple resource that is referenced using the value provided in the name attribute (not the n
Android解析XML总结
drinkingcode
06-27 1474
前言: 1>示例XML文件内容 对示例所演示的是如何解析一个XML文件,对于我们要解析XML文件,其已经放入本应用的文件夹下了; 对于我们要解析XML文件,其内容如下: 2>认识XmlPullParser I>解析器的当前事件状态可以通过调用getEventType()方法来知道; 在最开始的时候,解析器是处于START_DOCUMENT的事件状态之的; II>
XML解析——androidXML的三种解析方式
Cdaimadada的博客
03-29 2695
面试问答:xml解析常见的方式有哪些?XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。XML在不同的语言环境解析方式都是一样的,只不过实现的语法不同而已。  XML解析方式分为四种:1、DOM解析;2、SAX解析;Pull解析。  针对以下XML文件,会对三种方式进行详细描述:&lt;?xml version="1.0" encodin...
android xml的作用,Android提高之XML解析与生成实例详解
weixin_35158372的博客
05-25 172
本文实例讲述了使用SAX来解析XML。通常来说在Android里面可以使用SAX和DOM,DOM需要把整个XML文件读入内存再解析,比较消耗内存,而SAX是基于事件驱动的处理方式,可以在各节点触发回调函数,不过SAX适合节点结构简单的XML文档,复杂的XML文档在后期的节点深度处理会有点麻烦。本文要解析的test.xml文件如下:testSAXhellogvhttp://blog.csdn.net...
AndroidXML文件读取
每天不是在写bug就是在写bug的路上
12-01 1789
xml文件读取
Android设计模式之MVVM
一花一世界的博客
08-24 1139
简介 在开发可能你使用过MVP设计模式来对代码进行解耦,但是谷歌发布的DataBinding库更加简化了我们的代码,同时也催生了MVVM设计模式在Android的使用。在MVP模式我们需要Model、View、Presenter三者进行配合使用,而MVVM模式是由Model、View、ViewModel进行配合的,其的区别主要在于ViewModel。DataBinding是一个实现数据
Android studio 实现xml 数据解析
最新发布
05-30
Android Studio ,可以使用 XmlPullParser 解析器来解析 XML 数据XmlPullParser 解析器是 Android 提供的一种轻量级、高效的解析器,它可以逐行解析 XML 数据,并提供了丰富的方法来获取标签、属性和文本等...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Android动画学习(三)之使用ValueAnimator和ObjectAnimator实现动画实例 48505
  • Fragment简介和使用实例 29410
  • Android 实现能够暂停的录音功能 15772
  • Android中SQLite数据库介绍和使用 10696
  • Android 动画学习(一)之View Animation 8871

分类专栏

  • Android应用开发 21篇
  • Android自定义控件
  • Java并发编程 3篇
  • 深入理解java虚拟机
  • IOS应用开发
  • Cocos2d-lua

最新评论

  • Fragment简介和使用实例

    禁止拍拍: 很清晰的fragment教程,中间动态替换replace中继承fragment的类new会报错,网上换support.v4包的办法行不通,最后改了导包变成androidx就可以了,参考https://blog.csdn.net/weixin_44223883/article/details/103411908?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

  • Android 实现能够暂停的录音功能

    指尖跃动: 我接入了你介绍的库,但一直说找不到aac-encode的so,请问怎么解决?谢谢。

  • 线程的状态、分类及优先级

    文子越来越强: 线程优先级,复习了

  • Android动画学习(三)之使用ValueAnimator和ObjectAnimator实现动画实例

    Boyikia: 受教啦,thank you

  • Android动画学习(三)之使用ValueAnimator和ObjectAnimator实现动画实例

    康建伟 回复 sadikelong: 一千个读者就有一千部金瓶梅,要允许读者提出质疑!

大家在看

  • 数据结构:哈夫曼树及其哈夫曼编码 1184
  • this,apply,call,bind 超详细合集 805

最新文章

  • Android 实现能够暂停的录音功能
  • Android多线程及异步任务消息处理机制(一)--Handler的使用
  • Java并发编程系列博文目录
2014年24篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

两个鬼故事于氏起名大全男孩名字雨中背影英文版混响软件目前甘姓人口起名字女孩名字个人专业技术工作小结软件公司起名大全集中化妆品店铺起名字船主与油漆工宁波镇海疫情最新消息美甲美睫店起名 时尚给新生儿起名字男女通用朝雾メイサ耿飚自杀原因飘柔洗发水广告语淘宝整点聚秒杀器水暖电公司起名接种新冠疫苗后注意事项有哪些名典起名网mname32lnet素水泥浆用唐诗宋词起名大全汽车配件公司名字起名大全空间刷留言软件英格兰队VS德国队比分预测剑狱艺考报名和高考报名一起吗三个字的商标起名的周生辰是什么电视剧甘姓起名字女名字漂亮的邻居电影完整版今年第九号台风美莎克即将生成少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化