android中xml解析之xmlpull篇
来源:互联网 发布:mac暴风影音删除不了 编辑:程序博客网 时间:2024/05/18 02:36
Xml作为编程中一种重要的数据处理格式,用于标记数据、定义数据类型,是一种允许用户自己定义标记的源语言。Xml作为一种轻量级的数据文件,具有以下优点:
内容与结构完全分离
互操作性强
规范统一
支持多种编码
可扩展性强
常用于以下场合:
数据交换
Web服务
内容管理
配置
下面我将针对android中xml的处理做一些介绍,以此作为笔记以便后期查看与阅读。在编程中比较常用的xml解析方式有XmlPull、Sax、Dom等
1 利用XMLPull进行xml数据解析
XmlPull数据解析是以事件的方式进行文档解析的,如开始元素事件与结束元素事件,使用parser.next()进入下一个元素并触发相应的事件。事件将作为代码被发送,可以通过switch对需要的事件进行处理。
在此我提供一个xml文档,内容如下:
<?xml version = "1.0"encoding="utf-8"?>
<Configurations>
<Persons>
<Personid="1" name="tom" sex="female"description="" address="sichuan" />
<Personid="2" name="jim" sex="male"description="" address="beijing" />
</Persons>
<Works>
<Workid="1" name="software" description="">
<Personrefid="1" />
<Content>Progromingjava application</Content>
</Work>
<Workid="2" name="hardware" description="">
<Personrefid="2" />
<Content>Progromingiphone application</Content>
</Work>
</Works>
</Configurations>
后面所讲述的DOM与SAX处理都将对上面的xml文档进行处理,下面我们开始针对上面的文档利用XmlPull进行解析与生成的处理吧!
1.1 首先需要定义两个实体,实体如下:
1.1.1 Person.java
public class Person {
privateint id;
privateString name;
privateString sex;
privateString description;
privateString address;
publicint getId() {
returnid;
}
publicvoid setId(int id) {
this.id= id;
}
publicString getName() {
returnname;
}
publicvoid setName(String name) {
this.name= name;
}
publicString getSex() {
returnsex;
}
publicvoid setSex(String sex) {
this.sex= sex;
}
publicString getDescription() {
returndescription;
}
publicvoid setDescription(String description) {
this.description= description;
}
publicString getAddress() {
returnaddress;
}
publicvoid setAddress(String address) {
this.address= address;
}
}
1.1.2 Work.java
package com.example.Entities;
public class Work {
privateint id;
privateString name;
privateString description;
privateint refid;
privateString content;
publicint getId() {
returnid;
}
publicvoid setId(int id) {
this.id= id;
}
publicString getName() {
returnname;
}
publicvoid setName(String name) {
this.name= name;
}
publicString getDescription() {
returndescription;
}
publicvoid setDescription(String description) {
this.description= description;
}
publicint getRefid() {
return refid;
}
publicvoid setRefid(int refid) {
this.refid= refid;
}
publicString getContent() {
returncontent;
}
publicvoid setContent(String content) {
this.content= content;
}
}
1.1.3 以下该类用于解析Persons节点下的内容
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
importorg.xmlpull.v1.XmlPullParserException;
import android.util.Xml;
import com.example.Entities.Person;
public class PersonXmlService {
publicPersonXmlService() {
}
publicstatic List<Person> getAllPersons(InputStream inputStream) {
List<Person>persons = new ArrayList<Person>();
XmlPullParserparser = Xml.newPullParser();
try{
parser.setInput(inputStream,"utf-8");
inteventCode = parser.getEventType();
Personperson = null;
while(eventCode != XmlPullParser.END_DOCUMENT) {
StringTAG = parser.getName();
switch (eventCode) {
caseXmlPullParser.START_DOCUMENT:
break;
caseXmlPullParser.START_TAG:
if("Person".equalsIgnoreCase(TAG)) {
person= new Person();
person.setId(Integer.parseInt(parser.getAttributeValue(
null,"id")));
person.setName(parser.getAttributeValue(null,"name"));
person.setSex(parser.getAttributeValue(null,"sex"));
person.setDescription(parser.getAttributeValue(null,"description"));
person.setAddress(parser.getAttributeValue(null,"address"));
}
break;
caseXmlPullParser.END_TAG:
if("Person".equalsIgnoreCase(TAG)) {
persons.add(person);
}
if("Persons".equalsIgnoreCase(TAG)) {
break;
}
break;
caseXmlPullParser.END_DOCUMENT:
break;
default:
break;
}
}
}catch (XmlPullParserException e) {
e.printStackTrace();
}
returnpersons;
}
}
方法中传入的InputStream属于将xml转换的输入流。Works节点下的内容解析就不做代码提供了,各位可以根据以上的实例自己编写以下Works节点下的内容解析。
1.1.4 以下代码用于生成Persons节点内容
public static voidConvertToXml(List<Person> persons) {
XmlSerializerserializer = Xml.newSerializer();
StringWriterwriter = new StringWriter();
try{
serializer.setOutput(writer);
serializer.startDocument("utf-8",false);
serializer.startTag(null,"Configurations");
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output",false);
serializer.startTag(null,"Persons");
for(int i = 0; i < persons.size(); i++) {
serializer.startTag(null,"Person");
serializer.attribute(null,"id", String.valueOf(persons.get(i).getId()));
serializer.attribute(null,"name", persons.get(i).getName());
serializer.attribute(null,"sex", persons.get(i).getSex());
serializer.attribute(null,"description", persons.get(i).getDescription());
serializer.attribute(null,"address", persons.get(i).getAddress());
serializer.endTag(null,"Person");
}
serializer.endTag(null,"Persons");
serializer.endDocument();
}catch (IllegalArgumentException e) {
e.printStackTrace();
}catch (IllegalStateException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
借此机会将这些整理一下,供作参考,各位大牛们如有建议,希望多多赐教!不甚感激。
- android中xml解析之xmlpull篇
- Android--使用XMLPull解析xml
- android应用中使用xmlpull解析xml文档失败
- android xmlpull方式解析存储xml
- android使用xmlpull方式解析xml示例
- 使用xmlpull解析xml
- 使用XmlPull解析XML
- xmlpull解析XML
- 使用Xmlpull解析xml
- xml解析-xmlpull
- xmlpull解析xml
- xml请求,xmlpull解析
- android解析xml一直报错org.xmlpull.v1.XmlPullParserException
- android解析xml一直报错org.xmlpull.v1.XmlPullParserException
- XML解析中SAX和XMLpull的区别
- XML解析中SAX和XMLpull的区别
- Xml解析中SAX和XmlPull方式的区别
- 轻松使用xmlpull解析xml
- CXF
- 转:uboot源码分析(上)
- 用OLE/DOI 实现ABAP导出EXCEL表格
- 流程控制总结
- HDU 4502
- android中xml解析之xmlpull篇
- Session的使用技巧
- 谈嵌入式软件开发的模块化
- spring hibernate cxf/xfire/rest 框架搭建
- Qt智能指针和QObject对象树系统(父子系统)结合使用出现的问题
- eclipse修改dynamic web module version
- python中xrange和range的异同
- 带对话框的dll
- FM引起的softdog