/**
* 获取数据 该方法没有使用到 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>
原文链接:https://www.f2er.com/xml/299971.html