有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,在android等移动设备上推荐大家使用Pull解析器
生成实现代码:
package com.scl.parse;
import java.io.OutputStream;
import java.io.Writer;
import java.util.List;
import org.xmlpull.v1.XmlSerializer;
import android.util.Xml;
import com.scl.domain.Person;
public class PullCreatXml {
/**
* 使用输出流的方式
* @param persons
* @param out
* @throws Exception
*/
public void creatPersonXml(List<Person> persons, OutputStream out) throws Exception{
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(out, "utf-8");
//文档开始
serializer.startDocument("utf-8", true);
//开始persons标签
serializer.startTag(null, "persons");
for(Person person : persons){
//开始person标签
serializer.startTag(null,"person");
serializer.attribute(null, "id", person.getId().toString());
serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(person.getAge().toString());
serializer.endTag(null, "age");
//结束person标签
serializer.endTag(null, "person");
}
//结束persons标签
serializer.endTag(null, "persons");
//文档结束
serializer.endDocument();
out.flush();
out.close();
}
/**
* 使用Writer方式
* @param persons
* @param writer
* @throws Exception
*/
public void creatPersonXml2(List<Person> persons, Writer writer) throws Exception{
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(writer);
//文档开始
serializer.startDocument("utf-8", true);
//开始persons标签
serializer.startTag(null, "persons");
for(Person person : persons){
//开始person标签
serializer.startTag(null,"person");
serializer.attribute(null, "id", person.getId().toString());
serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(person.getAge().toString());
serializer.endTag(null, "age");
//结束person标签
serializer.endTag(null, "person");
}
//结束persons标签
serializer.endTag(null, "persons");
//文档结束
serializer.endDocument();
writer.flush();
writer.close();
}
}
单元测试代码
public void testPullCreatXmlTest() throws Throwable{
FileOutputStream out = this.getContext().openFileOutput("person.xml", Context.MODE_PRIVATE);
PullCreatXml creatXml = new PullCreatXml();
List<Person> persons = new ArrayList<Person>();
persons.add(new Person(1,"杨过",new Short("15")));
persons.add(new Person(2,"段誉",new Short("25")));
creatXml.creatPersonXml(persons, out);
}
public void testPullCreatXmlTest2() throws Throwable{
FileOutputStream out = this.getContext().openFileOutput("person2.xml", Context.MODE_PRIVATE);
PullCreatXml creatXml = new PullCreatXml();
List<Person> persons = new ArrayList<Person>();
persons.add(new Person(1,"杨过",new Short("15")));
persons.add(new Person(2,"段誉",new Short("25")));
OutputStreamWriter writer = new OutputStreamWriter(out, "utf-8");
creatXml.creatPersonXml2(persons, writer);
}
/** 返回字符串 */
public void testPullCreatXmlTest3() throws Throwable{
PullCreatXml creatXml = new PullCreatXml();
List<Person> persons = new ArrayList<Person>();
persons.add(new Person(1,"杨过",new Short("15")));
persons.add(new Person(2,"段誉",new Short("25")));
StringWriter writer = new StringWriter();
creatXml.creatPersonXml2(persons, writer);
Log.i(TAG, writer.toString());
}