有些时候,我们需要生成一个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()); }