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

Android 中 XmlPullParser 读写 XML 的方法

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

person.xml如下:

[html]
view plain
copy

person.xml如下:  
  
<?xml version="1.0" encoding="UTF-8"?>  
<persons>  
<person id="23">  
   <name>liming</name>  
   <age>30</age>  
</person>  
<person id="20">  
   <name>lili</name>  
   <age>25</age>  
</person>  
</persons>  

Android中使用XmlPullParser读写的代码:

[java]
view plain
copy

//读取public class PullService {  
public static List<Person> readXML(InputStream inputStream) throws IOException{  
    XmlPullParser parser = Xml.newPullParser();  
    try {  
    parser.setInput(inputStream, "UTF-8");  
    int eventType = parser.getEventType();  
     
    Person currentPerson = null;  
    List<Person> persons = null;  
    while (eventType != XmlPullParser.END_DOCUMENT) {  
     switch (eventType) {  
    case XmlPullParser.START_DOCUMENT://文档开始事件,可以进行数据初始化处理  
      persons = new ArrayList<Person>();  
      break;  
    case XmlPullParser.START_TAG://开始元素事件  
      String name = parser.getName();  
      if (name.equalsIgnoreCase("person")) {  
       currentPerson = new Person();  
       currentPerson.setId(new Integer(parser.getAttributeValue(null, "id")));  
      } else if (currentPerson != null) {  
       if (name.equalsIgnoreCase("name")) {  
        currentPerson.setName(parser.nextText());// 如果后面是Text节点,即返回它的值  
       } else if (name.equalsIgnoreCase("age")) {  
        currentPerson.setAge(new Short(parser.nextText()));  
       }  
      }  
      break;  
    case XmlPullParser.END_TAG://结束元素事件  
      if (parser.getName().equalsIgnoreCase("person") && currentPerson != null) {  
       persons.add(currentPerson);  
       currentPerson = null;  
      }  
      break;  
     }  
     eventType = parser.next();  
    }  
    inputStream.close();  
    return persons;  
    } catch (Exception e) {  
     e.printStackTrace();  
    }  
    return null;  
   }   

[java]
view plain
copy

//保存  
  
  
public static String writeXML(List<Person> persons, Writer writer){  
     XmlSerializer serializer = Xml.newSerializer();  
     try {  
         serializer.setOutput(writer);  
         serializer.startDocument("UTF-8", true);  
       //第一个参数为命名空间,如果不使用命名空间,可以设置为null  
         serializer.startTag("", "persons");  
         for (Person person : persons){  
             serializer.startTag("", "person");  
             serializer.attribute("", "id", person.getId().toString());  
             serializer.startTag("", "name");  
             serializer.text(person.getName());  
             serializer.endTag("", "name");  
             serializer.startTag("", "age");  
             serializer.text(person.getAge().toString());  
             serializer.endTag("", "age");  
             serializer.endTag("", "person");  
         }  
         serializer.endTag("", "persons");  
         serializer.endDocument();  
         return writer.toString();  
     } catch (Exception e) {  
         e.printStackTrace();  
     }  
     return null;  
  }  
}  

 

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




转自:http://blog.csdn.net/cool222/article/details/7748960
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: