您的位置:首页 > 移动开发 > Android开发

Android_15_pull解析Xml文件

2015-06-22 15:03 597 查看
在Android平台上可以使用Sax、Dom、和pull解析Xml文件。

pull破解器已经集成在Android操作系统中,无需添加任何jar文件。

pull解析器的源码及文档下载网址:http://xmlpull.org/xmlpull-website/impls.shtml

解析原理:

首先将数据读取到一个字符数组中。char[] = {"数据"};

开始解析,一个一个字符读取。读到>后判断这段语句是满足xml哪一个语法。

触发该语法对应的事件。

xml语法:

文件头

文件尾

元素节点头

元素节点尾

xml文件读取源码:

xml文件代码

<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>oyy</name>
<age>25</age>
</person>
<person id="20">
<name>wjm</name>
<age>20</age>
</person>
</persons>


读取xml文件方法:
用List集合存取,存取元素为Person类。

public static List<Person> getPersons(InputStream xml) throws Exception {
List<Person> persons = null;
Person person = null;
// 使用pull解析器 获得pull解析器对象
// XmlPullParser pullParser =
// XmlPullParserFactory.newInstance().newPullParser();
XmlPullParser pullParser = Xml.newPullParser();
// 为pull解析器设置要解析的Xml数据
pullParser.setInput(xml, "UTF-8");
int event = pullParser.getEventType();// 读取事件

while (event != XmlPullParser.END_DOCUMENT) {
// 判断是什么事件
switch (event) {
case XmlPullParser.START_DOCUMENT:
// 初始化
persons = new ArrayList<Person>();
break;

case XmlPullParser.START_TAG:
if ("person".equals(pullParser.getName())) {
int id = new Integer(pullParser.getAttributeValue(0));
person = new Person();
person.setId(id);
}
if ("name".equals(pullParser.getName())) {
String name = pullParser.nextText();
person.setName(name);
}
if ("age".equals(pullParser.getName())) {
int age = new Integer(pullParser.nextText());
person.setAge(age);
}
break;
case XmlPullParser.END_TAG:
if ("person".equals(pullParser.getName())) {
persons.add(person);
person = null;
}
break;
}
event = pullParser.next();// 读到开始语句后 继续解析
}
return persons;
}


采用面向对象的方式存储xml文件:

使用Pull解析器存储文件

/**
* 保持数据到XML文件中
* @param persons 数据
* @param out 输出方向
* @throws Exception
*/
public static void save(List<Person> persons,OutputStream out) throws Exception{
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(out,"UTF-8");
serializer.startDocument("UTF-8", true);//开始文档
serializer.startTag(null, "persons");//元素开始节点
for(Person person : persons){
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");

serializer.endTag(null,  "person");
}
serializer.endTag(null,  "persons");//元素结束节点
serializer.endDocument();//结束文档
out.flush();
out.close();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: