1、使用XmlPullParser解析xml数据:
①pullParser.setInput(xml,"UTF-8");给pull解析器一个输入流数据。
②int eventType = pullParser.getEventType();获取当前事件类型。
③while (eventType != XmlPullParser.END_DOCUMENT) 比对当前事件类型是否为xml文档中的"END_DOCUMENT",若“是”则结束解析。
eventType = pullParser.next();顺移当前解析器的指针。
④case XmlPullParser.START_TAG:当解析遇到元素的开始标识时,判断具体是哪个元素,获取所需的数据。
⑤case XmlPullParser.END_TAG:当解析遇到元素的结束标识时,判断是否为一个完整数据的结束标识,若“是”则打包一条数据。
2、XmlSerializer序列化生成xml数据:
- public static List<Person> getPersons(InputStream xml) throws Exception {
- List<Person> persons = null;
- Person person = null;
- XmlPullParser pullParser = Xml.newPullParser();
- pullParser.setInput(xml,"UTF-8");
- int eventType = pullParser.getEventType();
- while (eventType != XmlPullParser.END_DOCUMENT) {
- switch (eventType) {
- case XmlPullParser.START_DOCUMENT:
- persons = new ArrayList<Person>();
- break;
- case XmlPullParser.START_TAG:
- if ("person".equals(pullParser.getName())) {
- int id = Integer.parseInt(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 = Integer.parseInt(pullParser.nextText());
- person.setAge(age);
- }
- break;
- case XmlPullParser.END_TAG:
- if ("person".equals(pullParser.getName())) {
- persons.add(person);
- person = null;
- }
- break;
- }
- eventType = pullParser.next();
- }
- return persons;
- }
①serializer.setOutput(outStream,"UTF-8");给序列化器一个输出流。
②根据所需xml数据格式开始序列化生成xml数据。
- public static void createXml(List<Person> persons,OutputStream outStream) throws Exception {
- XmlSerializer serializer = Xml.newSerializer();
- serializer.setOutput(outStream,"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();
- outStream.flush();
- outStream.close();
- }
bug: 实现
Xml.newPullParser()
调用
nextText()有个错误,nextText()
并不总是向文档中所提到优先于
END_TAG执行
。