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文档。 为什么要序列化? 用于标识区分唯一对象,并转换成字节流,方便在网络中传输数据。
首先我通过一个对象数据《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文档。 为什么要序列化? 用于标识区分唯一对象,并转换成字节流,方便在网络中传输数据。
相关文章推荐
- System.InvalidOperationException: 生成 XML 文档时出错 这样的错误 序列化类型 xxx 的对象时检测到循环引用
- python通过dom生成XML文档
- 利用JAXB通过XML模式生成XML文档
- [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类
- C#温故而知新学习系列之XML编程—6-XmlSerializer类把复杂对象序列化为XML文档
- 解析xml,并通过xml生成pdf文档
- 通过 DOM 方式生成 XML 文档
- 通过xml生成word文档
- 通过Visual Studio快速生成Json或XML反序列化类代码
- 用jaxb通过XSD生成Java类,java对象转换成xml文件
- C#温故而知新学习系列之XML编程—XMLSerializer类把XML文档反序列化为对象(八)
- 通过 SAX 方式生成 XML 文档
- 通过xml生成word文档
- 通过 DOM4J 方式生成 XML 文档
- 在java 用xml模板通过freemarker生成word文档
- C#温故而知新学习系列之XML编程—8-XMLSerializer类把XML文档反序列化为对象
- Android学习笔记_31_通过后台代码生成View对象以及动态加载XML布局文件到LinearLayout
- XStream 通过对象流进行对象与xml的序列化和反序列化
- 通过代码XML注释与Sandcastle生成SDK文档(进阶篇)
- C#温故而知新学习系列之XML编程—XmlSerializer类把复杂对象序列化为XML文档(六)