XML技术在跨平台的情况下的数据交互中得到了广泛的应用,假如我们需要开发一个Android应用程序,需要同服务器端进行数据交互,通过XML文件可以很方便的在Android平台和服务器之间进行数据传输,具体实现涉及到对XML文件进行解析及写入的技术。本文实现在Android平台上基于Pull方式对XML文件解析的技术。
更多Android相关信息见Android 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=11XmlPullParser是一个java实现的开源API包(源码下载地址http://www.xmlpull.org/ ),实现了pull方式解析xml文件的方法, Android SDK中包含了该API,使用时需要导入以下三个包:import org.xmlpull.v1.XmlPullParser;//包含解析XML文件类的包import org.xmlpull.v1.XmlPullParserException;//处理异常importorg.xmlpull.v1.XmlSerializer;//包含写入XML文件类的包
我们以SQLite数据库课堂练习中的数据类People为例,People类有4个属性:ID,Name,Age,Height,假设有一条测试数据ID=1,Name=”杜甫”,Age=30,Height=1.75,在XML文件中对应的数据项元素如下:<peopleinfo> <peopletag="item1"> <id>1</id> <name>杜甫</name> <age>30</age> <height>1.75</height></people></peopleinfo>
1. 使用XmlPullParser对该文件解析
首先需要初始化一个XmlPullParser对象parser,R.xml.
peopleinfo为文件peopleinfo.xml在项目中的标识,读入该文件后一步一步对文件中的元素进行解析。XmlPullParser parser= getResources().getXml(R.xml.
peopleinfo);XmlPullParser的相关函数及说明如下:
| 相关函数或变量 | 说明 | 示例 |
| XmlPullParser.START_DOCUMENT | 文档开始标识,根元素 | <peopleinfo> |
| XmlPullParser.END_DOCUMENT | 文档结束标识 | </peopleinfo> |
| XmlPullParser.START_TAG | 元素开始标识 | <people> |
| XmlPullParser.END_TAG | 元素结束标识 | </people> |
| getEventType() | 获取当元素的类型 (如START_TAG, END_TAG, TEXT, etc.) | 如<peopleinfo>的类型为START_DOCUMENT |
| next() | 获取下一个待解析元素 | 事件表示<>括号中的一个项 |
| getName() | 获取当前元素的名字 | 如读取到<age>,返回值为”age” |
| nextText() | 返回当前元素所对应的文本值 | 如事件为<height>时,返回1.75 |
| getAttributeName(int index) | 获取当前元素中属性名 | 如tag |
| getAttributeValue(int index) | 获取当前元素中属性的值 | 如"item1" |
解析步骤:1) 初始化parser,指定xml文件2) 读取文档开始标识,根元素<peopleinfo>3) 读取数据项元素开始标识, <people>a) 读取数据项元素的属性,tag="item1"b) 读取数据项的子元素,id,name,age,height4) 一个数据项结束,</people>,保存该数据项的结果5) 读取文档结束标识,</peopleinfo>
2. 使用XmlSerializer对写XML文件
写入XML文件的过程:先初始化一个XmlSerializer对象serializer,设置输出的Writer对象,然后数据写入serializer中,再将该对象通过Writer写入文件。XmlSerializer serializer = Xml.
newSerializer();serializer.setOutput(writer);//…writer.flush()XmlSerializer的相关函数及说明如下:
| 相关函数 | 说明 | 示例 |
| setOutput(Writer writer) | 设置输出的Writer对象 | |
| startDocument(String encoding, Boolean standalone); | 写入XML文件的起始标识语句,必须在setOutput后被调用 | <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> |
| startTag(String namespace, String name); | 写入开始元素标识 | 如<people>,<age> |
| attribute(String namespace, String name, String value); | | 如tag=”people1” |
| text(String text) | 写入元素值 | 如:杜甫 |
| endTag(String namespace, String name) | 写入元素结束标识 | 如</people>,</age> |
| endDocument(); | 写入文档结束标记 | |