您的位置:首页 > 其它

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

2014-02-04 15:21 363 查看
  在基本操作了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 {
@Test
public 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文档。 为什么要序列化? 用于标识区分唯一对象,并转换成字节流,方便在网络中传输数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: