XML解析方式一般有DOM解析,SAX解析,而Android中推荐的解析方式是PULL解析,以下是最近写的一个Demo中的关键代码。
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;
import android.os.Environment;
import android.util.Xml;
public class PersonXmlPullParserAndXmlSerializer {
public ArrayList<Person> XmlPullParserTest() throws Exception {
//创建一个InputStream通过反射得到当前累的对象然后getClassLoader().getResourceAsStream();
InputStream is = PersonXmlPullParserAndXmlSerializer.class.getClassLoader().getResourceAsStream("persons.xml");
//Xml.newPullParser()得到一个XmlPullParser
XmlPullParser xpp = Xml.newPullParser();
//设置要解析的目标和读取的编码
xpp.setInput(is, "UTF-8");
ArrayList<Person> listPerson = new ArrayList<Person>();
Person p = null;
for (int i = xpp.getEventType(); i != XmlPullParser.END_DOCUMENT; i = xpp.next()) {
switch (i) {
case XmlPullParser.START_TAG:
if (xpp.getName() == "person") {
String str = xpp.getAttributeValue(0);
p = new Person();
p.setId(Integer.parseInt(str));
} else if (xpp.getName().equals("name")) {
p.setName(xpp.nextText());
} else if (xpp.getName().equals("age")) {
p.setAge(Integer.parseInt(xpp.nextText()));
}
break;
case XmlPullParser.END_TAG:
//遍历Xml文件中一个对象,直到解析到这个对象的
if (xpp.getName().equals("person")) {
listPerson.add(p);
}
break;
}
}
return listPerson;
}
public void XmlSerializerTest(List<Person> persons) throws Exception {
OutputStream os = new FileOutputStream(new File(Environment.getExternalStorageDirectory(), "persons.xml"));
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(os, "UTF-8");
serializer.startDocument("UTF-8", true);
serializer.startTag(null, "persons");
for (Person person : persons) {
serializer.startTag(null, "person");
serializer.attribute(null, "id", person.getId().toString());
serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(person.getAge().toString());
serializer.endTag(null, "age");
serializer.endTag(null, "person");
}
serializer.endDocument();
}
}
分享到:
相关推荐
C#中的XmlSerializer无法直接序列化Font和Color类型的数据,这里提供的方法,可以对Font和Color进行序列化
主要介绍了Android应用中使用XmlSerializer序列化XML数据的教程,XmlSerializer序列化XML同时也是将数据写为XML格式的基本方法,需要的朋友可以参考下
Android系统中和创建XML相关的包为org.xmlpull.v1,在这个包中不仅提供了用于创建XML的 XmlSerializer,还提供了用来解析XML的Pull方式解析器 XmlPullParser XmlSerializer没有像XmlPullParser那样提取XML事件,而是...
该Demo采用XmlSerializer对XML进行封装,序列化与反序列化以及读取指定节点的值
XmlSerializer序列和反序列化Deno 是一个控制台程序。
使用XmlSerializer类将对象序列化为Xml格式保存用到的资源文件源代码
.NET框架提供了两种种串行化的方式:1、是使用BinaryFormatter进行串行化;2、使用XmlSerializer进行串行化。第一种方式提供了一个简单的二进制数据流以及某些附加的类型信息,而第二种将数据流格式化为XML存储。 ...
1.对象序列化的介绍 (1).NET支持对象序列化的几种方式 ...XML序列化:对象序列化之后的结果是XML形式的,通过XmlSerializer 类来实现的,这个类位于System.Xml.Serialization命名空间下。XML序列化不能序列化私有数据。
使用XmlSerializer序列化List对象成XML格式序列化成XML格式,和反序列化原格式 代码如下:List<Customer> lst = new List();Customer c = new Customer();c.ID = 1;c.Name = “one”;lst.Add(c); c = new Customer()...
或者在关机时需要保存下来以便下次再次启动程序使用就需要序列化和反序列化。范围:本文只介绍xml序列化,其实序列化可以是二进制的序列化,也可以是其他格式的序列化。看一段最简单的Xml序列化代码 代码如下:class ...
对象序列化成XML格式数据的示例代码,详细可以查看博客:http://www.cnblogs.com/plokmju/p/android_XmlSerializer.html
和好友一起总结了C#的四种对象序列化方法(DataContractSerializer、XmlSerializer、BinaryFormatter、SoapFormatter),其中有DataContractSerializer和XmlSerializer不需要在对象上标注[Serializable],...
NET 框架中的 XmlSerializer 是一种很棒的工具,它将高度结构化的 XML 数据映射到 .NET ...本文研究了在使用 XmlSerializer 构建基于 XML 的解决方案时可能发生的各种错误,并且讨论了用来诊断这些错误的技巧和工具。
Android提供了XmlSerializer来实现XML文件的序列化。相比传统方式,更高效安全,需要的朋友可以参考下
在.NET 框架中的 XmlSerializer 类是一种很棒的工具,它是将高度结构化的 XML 数据 映射为 .NET 对象。XmlSerializer 类在程序中通过单个 API 调用来执行 XML 文档和对 象之间的转换。转换的映射规则在 .NET 类中...
首先是创建,我们用XmlSerializer这个类来创建一个xml文件,其次是解析xml文件,常用的有dom,sax,XmlPullParser等方法,由于sax代码有点复杂,本节只讲解一下dom与XmlPullParser解析,sax我将会在下一节单独讲解,...
通过一个章节来讲解序列化与反序列化,对binaryformatter soapformatter xmlserializer这三种序列化的详情讲解,希望对大家有所帮助。