andorid xml 解析

public class PersonService {
/**
* 获取数据 该方法没有使用到 personService 的成员变量; 所以老师把 它 设置为static 的;
*
* @param xml
* @return
* @throws Exception
*/
// 如果没有控制台输出; 可以双击 device 设备激活;然后就有了
public static List<Person> getPersons(InputStream xml) throws Exception {
List<Person> persons = null;
Person person = null;
// XmlPullParser pullParser1 = XmlPullParserFactory.newInstance()
// .newPullParser(); 和下面一样的; 就是没有下面的简单;
XmlPullParser pullParser = Xml.newPullParser();
pullParser.setInput(xml,"UTF-8");// 为Pull解析器设置要解析的XML数据
int event = pullParser.getEventType();// 第一个触发了start document 事件 头信息;
while (event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_DOCUMENT:// <?xml version="1.0"
// encoding="UTF-8"?>
persons = new ArrayList<Person>();
break;
// 自己感觉如果是
case XmlPullParser.START_TAG:
if ("person".equals(pullParser.getName())) {// 解析到person 节点;
int id = new Integer(pullParser.getAttributeValue(0));
person = new Person();
person.setId(id);
}
if ("name".equals(pullParser.getName())) {
String name = pullParser.nextText();// 不会自动的移动指针;
// 需要用nextText 来移动;
person.setName(name);
}
if ("age".equals(pullParser.getName())) {
int age = new Integer(pullParser.nextText());// 不会自动的移动指针;
// 需要用nextText来移动;
person.setAge(age);
}
break;

case XmlPullParser.END_TAG:
if ("person".equals(pullParser.getName())) {
persons.add(person);
person = null;
}
break;
}// 指针进入到下一个节点; 触发下个节点的事件 ;
// 并且把 event 的值重新赋值;
event = pullParser.next();

}
return persons;
}
//-------------------------------------------------------------------------------------------------------------------
/**
* 保存数据 没有用到成员变量; 可以做成staic 的;
*

*/
// 利用面向对象的方式来 输出xml 文件;不用自己拼接字符串的方式输出xml;
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();
}

}

// junit test;

public class PersonServiceTest extends AndroidTestCase {
private static final String TAG = "PersonServiceTest";

public void testPersons() throws Exception {// 因为在类路径下面; 所以可以直接用这种方法;
InputStream xml = this.getClass().getClassLoader()
.getResourceAsstream("person.xml");
List<Person> persons = PersonService.getPersons(xml);
for (Person person : persons) {
Log.i(TAG,person.toString());
}
}

public void testSave() throws Exception {
List<Person> persons = new ArrayList<Person>();
persons.add(new Person(43,"zhangxx",80));
persons.add(new Person(12,"lili",20));
persons.add(new Person(78,"xiaoxiao",8));
// <包>/files
// 快速指定 当前应用包的files 文件夹;
// android.test.AndroidTestCase.getContext()

File xmlFile = new File(getContext().getFilesDir(),"aa.xml");
FileOutputStream outStream = new FileOutputStream(xmlFile);
PersonService.save(persons,outStream);
}
}

//-------------------------------------------------------------------------------------------------------------------

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇