在开发中最常见的数据格式一般两种:Json和XML。今天介绍的是一个XML的解析库,因为它看起来最简单,同时还强调了XML的正确性。如果不是很了解什么是XML,还请自己查一下资料,我主要就XOM库关于怎么存储XML和解析XML做一下说明。
编写一个Person对象
它包括姓名,年龄,地址,你想要将他们序列化到XML 这个Person类有一个getXML()方法,它使用XOM来产生被转换XML的Element对象的Person数据。
public class Person {
private String name;
private String age;
private String address;
//一般的构造函数
public Person(String name,String age,String address) {
this.name = name;
this.age = age;
this.address = address;
}
// XML解析数据 参数传递Element对象
public Person(Element person){
name = person.getFirstChildElement("name").getValue();
age = person.getFirstChildElement("age").getValue();
address = person.getFirstChildElement("address").getValue();
}
//方法生成一个Element节点
public Element getXML(){
// 生成一个person节点 它下面还有三个子节点 name age address
Element Node = new Element("person");
// 生成一个name节点 并使用appendChild()填充数据
Element Node_name = new Element("name");
Node_name.appendChild(name);
Element Node_age = new Element("age");
Node_age.appendChild(age);
Element Node_address = new Element("address");
Node_address.appendChild(address);
// 将三个子节点 name age address添加到父节点Person中
Node.appendChild(Node_name);
Node.appendChild(Node_age);
Node.appendChild(Node_address);
return Node;
}
序列化生成XML
编写一个函数用来生成序列化数据,并将数据转换为数据流写入。参数OutputStream os 表示输出流, Document doc则是生成的完整的XML格式。
public static void format(OutputStream os,Document doc) throws Exception{
// Serializer参数 第一个为输出流 第二个为编码格式
Serializer serializer = new Serializer(os,"UTF-8");
serializer.setIndent(4);
serializer.setMaxLength(60);
serializer.write(doc);
serializer.flush();
}
反序列化获取Person对象
获取XML文件的File对象,使用XOM的Builder.build()方法打开并读取一个文件,使用getChildElements() 产生一个Element列表(不是一个标准的List 只是拥有size和get方法的对象) 注意,这里需要知道XML文件的确切结构。
List<Person> people = new ArrayList<Person>();
File file = new File(getExternalFilesDir(null),"person.xml");
Document doc = new Builder().build(file);
Elements elements = doc.getRootElement().getChildElements();
for(int i = 0; i < elements.size(); i++){
people.add(new Person(elements.get(i)));
}
//直接打印List容器中的数据即可
编写测试样例
//1.序列化生成XML
List<Person> people = new ArrayList<Person>();
people.add(new Person("zhengyan","24","wuhan"));
people.add(new Person("wukong","26","beijing"));
people.add(new Person("livvy","21","shenzheng"));
people.add(new Person("susan","hk"));
// 生成XML的根节点people 调用对象P的方法getXML() 组装成完整的XML数据
Element root = new Element("people");
for(Person p : people){
root.appendChild(p.getXML());
}
// 生成要存储XML文件的File对象
File file = new File(getExternalFilesDir(null),"person.xml");
FileOutputStream fos = new FileOutputStream(file);
//将Element对象的root传入Document的构造器中
Document doc = new Document(root);
// 序列化生成XML
Person.format(fos,doc);