Android应用中使用XmlSerializer序列化XML数据的教程
程序员文章站
2024-02-29 19:49:46
首先,我们看一下什么是serializer,serializer就是串行化,又名序列化。它可并不只是简单的把对象保存在存储器上,它可以使我们在流中传输对象,使对象变的可以像...
首先,我们看一下什么是serializer,serializer就是串行化,又名序列化。它可并不只是简单的把对象保存在存储器上,它可以使我们在流中传输对象,使对象变的可以像基本数据一样传递。
xmlserializer是针对xml进行序列化的类库,我们先来看一下里面的常用方法:
基本方法
1.创建一个xml文件的序列化器,返回的是一个xml的 serializer 对象。
xmlserializer = xml.newserializer();
2.设置序列化器的输出路径和编码方式
fileoutputstream = new fileoutputstream(new file(environment.getexternalstoragedirectory(),"文件名.xml")); xmlserializer.setoutput(fileoutputstream, "编码");
3.声明xml文件头(写入xml文件中的声明头)
serializer.startdocument("xml声明的编码", 文档是否独立);
4.声明子节点
serializer.starttag(namespace,string "节点名");
5.声明节点属性
serializer.attribute(命名空间,属性名,属性值);
6.声明节点中的textnode
serializer.txt(文本值);
7.设置节点尾标签
serializer.endtag(命名空间, "节点名");
8.写xml文件尾表示xml文件结束。
serializer.enddocument();
9.关闭资源
fileoutputstream.close();
示例
最终效果图如上
现在粘贴主要代码:
main.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/textview" /> </linearlayout>
activity的代码
package cn.com.xmlseriliazer; import java.io.stringwriter; import java.util.arraylist; import org.xmlpull.v1.xmlpullparserfactory; import org.xmlpull.v1.xmlserializer; import android.app.activity; import android.os.bundle; import android.widget.textview; /** * * @author chenzheng_java * @description 测试通过xmlserilizer生成xml文件 * @since 2011/03/03 * */ public class xmlserializeractivity extends activity { @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); string result = producexml(); textview textview = (textview)this.findviewbyid(r.id.textview); textview.settext(result); } /** * * @return 生成的xml文件的字符串表示 */ private string producexml(){ stringwriter stringwriter = new stringwriter(); arraylist<beauty> beautylist = getdata(); try { // 获取xmlserializer对象 xmlpullparserfactory factory = xmlpullparserfactory.newinstance(); xmlserializer xmlserializer = factory.newserializer(); // 设置输出流对象 xmlserializer.setoutput(stringwriter); /* * startdocument(string encoding, boolean standalone)encoding代表编码方式 * standalone 用来表示该文件是否呼叫其它外部的文件。 * 若值是 ”yes” 表示没有呼叫外部规则文件,若值是 ”no” 则表示有呼叫外部规则文件。默认值是 “yes”。 */ xmlserializer.startdocument("utf-8", true); xmlserializer.starttag(null, "beauties"); for(beauty beauty:beautylist){ /* * starttag (string namespace, string name)这里的namespace用于唯一标识xml标签 *xml 命名空间属性被放置于某个元素的开始标签之中,并使用以下的语法: xmlns:namespace-prefix="namespaceuri" 当一个命名空间被定义在某个元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。 注释:用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。不过,很多公司常常会作为指针来使用命名空间指向某个实存的网页,这个网页包含着有关命名空间的信息。 */ xmlserializer.starttag(null, "beauty"); xmlserializer.starttag(null, "name"); xmlserializer.text(beauty.getname()); xmlserializer.endtag(null, "name"); xmlserializer.starttag(null, "age"); xmlserializer.text(beauty.getage()); xmlserializer.endtag(null, "age"); xmlserializer.endtag(null, "beauty"); } xmlserializer.endtag(null, "beauties"); xmlserializer.enddocument(); } catch (exception e) { e.printstacktrace(); } return stringwriter.tostring(); } /** * * @return 包含了众多美女信息的集合 */ private arraylist<beauty> getdata(){ arraylist<beauty> beautylist = new arraylist<beauty>(); beauty yangmi = new beauty("杨幂", "23"); beauty linzhiling = new beauty("林志玲", "28"); beautylist.add(yangmi); beautylist.add(linzhiling); return beautylist; } /** * * @author chenzheng_java * 美人实体类 */ private class beauty{ string name; string age ; public string getname() { return name; } public void setname(string name) { this.name = name; } public string getage() { return age; } public void setage(string age) { this.age = age; } @override public string tostring() { return "beauty [age=" + age + ", name=" + name + "]"; } public beauty(string name, string age) { this.name = name; this.age = age; } public beauty(){ } } }
其他都为默认。
由代码我们可以看到,其实使用xmlserializer生成xml也是相当容易的。基本的步骤和解析xml差不多。这里就不多说话了。详情请看api。