采用Pull解析器生成XML内容
在Android已经集成进了Pull解析器,所以无需添加任何jar文件
Android系统本身用到的xml,其内部也是采用Pull解析器进行解析的。
Android系统本身用到的xml,其内部也是采用Pull解析器进行解析的。
下面是一个xml文件, 是要以这个xml结构生成xml的内容:
<?xml version="1.0" encoding="UTF-8" ?> <!-- start document -->
<persons>
<person id="23">
<name>liming</name>
<age>30</age>
</person>
<person id="20">
<name>zhangxiaoxiao</name>
<age>25</age>
</person>
</persons>
<!-- end document -->
写一个类是用来生成xml的类:
/**
* 采用Pull解析器生成XML内容 ,保存数据、
* @param persons 数据
* @param out 输出方向
* @throws Exception
*/
public static void save(List<Person> persons, OutputStream out) throws Exception{
//用Xml工具类快速得到序列化器
XmlSerializer serializer = Xml.newSerializer();
//setOutput(OutputStream os, String encoding) OutputStream为内容输出方向
serializer.setOutput(out, "utf-8");
//写入文档的开始文档,即<?xml version="1.0" encoding="utf-8"?>
//serializer.startDocument(字符编码, 用于指定这个xml文件是否单独存在)
serializer.startDocument("utf-8", true);
//serializer.startTag(命名空间, 节点名)
serializer.startTag(null, "persons");
//对persons进行迭代,得到各个person标签
for (Person person : persons) {
serializer.startTag(null, "person");
//得到person的属性值id
//attribute(命名空间, 属性名, 属性值)
serializer.attribute(null, "id", person.getId().toString());
serializer.startTag(null, "name");
//得到name节点的内容
serializer.text(person.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(person.getAge().toString());
serializer.endTag(null, "age");
serializer.endTag(null, "person");
}
//persons节点的结束标签
serializer.endTag(null, "persons");
//文档写入结束
serializer.endDocument();
//把数据刷出去,再关闭
out.flush();
out.close();
}
用Junit单元测试类测试
先在清单文件AndroidManifest.xml中加入:
<uses-library android:name="android.test.runner"/>
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.example.me_xmlandroid"
android:label="解析器解析和生成XML内容"></instrumentation>
在测试类中:
public class PersonServiceTest extends AndroidTestCase{
public void testSave() throws Exception{
List<Person> persons = new ArrayList<Person>();
persons.add(new Person(1, "志光", 22));
persons.add(new Person(2, "丹", 20));
persons.add(new Person(3, "杏", 20));
//把这个xml保存到 <当前包>/files 下
File xmlFile = new File(getContext().getFilesDir(), "out.xml");
FileOutputStream outStream = new FileOutputStream(xmlFile);
PersonService.save(persons, outStream);
}
}
现在就已经完成用pull解析器生成xml