XMLPULL解析(2)---通过对象序列化生成XML文档

来源:互联网 发布:创维云电视软件下载 编辑:程序博客网 时间:2024/06/06 00:21

  在基本操作了XMLPULL解析 拉模式原理后,我开始学习对XML文档的CURD增删改查操作,不同于SAX和DOM解析方式,STAX的XMLPULL解析有随时终止解析和节约内存的优势。

 

  首先我通过一个对象数据《List》生成XML文档的例子,了解生成XML文档原理:

      

import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.junit.Test;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import org.xmlpull.v1.XmlSerializer;//StAx :xmlpull解析步骤:public class XMLPulldemo {@Testpublic void demo3() throws Exception {// 声明一个List集合 存放Company对象List<Company> companies = new ArrayList<Company>();Company company1 = new Company();company1.setName("腾讯");company1.setAddress("深圳");company1.setPnum(2000);Company company2 = new Company();company2.setName("阿里巴巴");company2.setAddress("杭州");company2.setPnum(1800);companies.add(company1);companies.add(company2);// 1建立xmlpull序列化工厂:XmlPullParserFactory factory = XmlPullParserFactory.newInstance();XmlSerializer serializer = factory.newSerializer();// 实例化xml序列对象serializer.setOutput(new FileOutputStream("book_bak3.xml"), "utf-8");// 开始文档serializer.startDocument("utf-8", true);//文档声明 :<?xml version="1.0" encoding="utf-8" standalone="yes">serializer.startTag(null, "companies");for (Company company : companies) {serializer.startTag(null, "company");serializer.startTag(null, "name");serializer.text(company.getName());serializer.endTag(null, "name");serializer.startTag(null, "pnum");serializer.text(company.getPnum()+"");serializer.endTag(null, "pnum");serializer.startTag(null, "address");serializer.text(company.getAddress());serializer.endTag(null, "address");serializer.endTag(null, "company");}serializer.endTag(null, "companies");serializer.endDocument();}}

Company对象:

public class Company {private int pnum;private String address;private String name;public Company() {}public int getPnum() {return pnum;}public void setPnum(int pnum) {this.pnum = pnum;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

       运行结果:

          <?xml version="1.0" encoding="utf-8" standalone="yes"?>
<companies>
<company>
<name>腾讯</name>
<pnum>2000</pnum>
<address>深圳</address>
</company>
<company>
<name>阿里巴巴</name>
<pnum>1800</pnum>
<address>杭州</address>
</company>
</companies>


     在上面例子中,要注意的是第一:书写习惯问题,例如,当生成startTag标签后,最后也写上endTag以便失误遗漏。

                                                      第二是:理解对象类型序列化 ---生成----XML文档。 为什么要序列化? 用于标识区分唯一对象,并转换成字节流,方便在网络中传输数据。

0 0
原创粉丝点击