Android 中 XmlPullParser 读写 XML 的方法

http://www.xmlpull.org/ XmlPullParser 是 Android 内置的 XML 解析器, 运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。

person.xml如下:

[html] view plain copy
  1. person.xml如下:  
  2.   
  3. xml version="1.0" encoding="UTF-8"?>  
  4. <persons>  
  5. <person id="23">  
  6.    <name>limingname>  
  7.    <age>30age>  
  8. person>  
  9. <person id="20">  
  10.    <name>liliname>  
  11.    <age>25age>  
  12. person>  
  13. persons>  


在Android中使用XmlPullParser读写的代码:

[java] view plain copy
  1. //读取public class PullService {  
  2. public static List readXML(InputStream inputStream) throws IOException{  
  3.     XmlPullParser parser = Xml.newPullParser();  
  4.     try {  
  5.     parser.setInput(inputStream, "UTF-8");  
  6.     int eventType = parser.getEventType();  
  7.      
  8.     Person currentPerson = null;  
  9.     List persons = null;  
  10.     while (eventType != XmlPullParser.END_DOCUMENT) {  
  11.      switch (eventType) {  
  12.     case XmlPullParser.START_DOCUMENT://文档开始事件,可以进行数据初始化处理  
  13.       persons = new ArrayList();  
  14.       break;  
  15.     case XmlPullParser.START_TAG://开始元素事件  
  16.       String name = parser.getName();  
  17.       if (name.equalsIgnoreCase("person")) {  
  18.        currentPerson = new Person();  
  19.        currentPerson.setId(new Integer(parser.getAttributeValue(null"id")));  
  20.       } else if (currentPerson != null) {  
  21.        if (name.equalsIgnoreCase("name")) {  
  22.         currentPerson.setName(parser.nextText());// 如果后面是Text节点,即返回它的值  
  23.        } else if (name.equalsIgnoreCase("age")) {  
  24.         currentPerson.setAge(new Short(parser.nextText()));  
  25.        }  
  26.       }  
  27.       break;  
  28.     case XmlPullParser.END_TAG://结束元素事件  
  29.       if (parser.getName().equalsIgnoreCase("person") && currentPerson != null) {  
  30.        persons.add(currentPerson);  
  31.        currentPerson = null;  
  32.       }  
  33.       break;  
  34.      }  
  35.      eventType = parser.next();  
  36.     }  
  37.     inputStream.close();  
  38.     return persons;  
  39.     } catch (Exception e) {  
  40.      e.printStackTrace();  
  41.     }  
  42.     return null;  
  43.    }   
[java] view plain copy
  1. //保存  
  2.   
  3.   
  4. public static String writeXML(List persons, Writer writer){  
  5.      XmlSerializer serializer = Xml.newSerializer();  
  6.      try {  
  7.          serializer.setOutput(writer);  
  8.          serializer.startDocument("UTF-8"true);  
  9.        //第一个参数为命名空间,如果不使用命名空间,可以设置为null  
  10.          serializer.startTag("""persons");  
  11.          for (Person person : persons){  
  12.              serializer.startTag("""person");  
  13.              serializer.attribute("""id", person.getId().toString());  
  14.              serializer.startTag("""name");  
  15.              serializer.text(person.getName());  
  16.              serializer.endTag("""name");  
  17.              serializer.startTag("""age");  
  18.              serializer.text(person.getAge().toString());  
  19.              serializer.endTag("""age");  
  20.              serializer.endTag("""person");  
  21.          }  
  22.          serializer.endTag("""persons");  
  23.          serializer.endDocument();  
  24.          return writer.toString();  
  25.      } catch (Exception e) {  
  26.          e.printStackTrace();  
  27.      }  
  28.      return null;  
  29.   }  
  30. }  

 

本文参考:http://www.linuxidc.com/Linux/2010-11/29768.htm


转自:http://blog.csdn.net/cool222/article/details/7748960

你可能感兴趣的:(web)