同其他系統一樣,android的解析xml的方式也有三種:sax,dom,pull。本文主要記錄pull方式。
pull解析xml的方式是事件驅動,當pull到一種標籤的時候,它可以返回一個事件,我們根據事件來解析整個xml文檔。
/**<br />*inStream代表需要解析的檔案的輸入資料流<br />*/<br />public static List<Person> getPersons(InputStream inStream){<br />List<Person> persons = null;<br />Person person = null;<br />XmlPullParser parser = Xml.newPullParser();<br />parser.setInput(inStream, "UTF-8");<br />int eventType = parser.getEventType();//產生第一個事件<br />while(eventType!=XmlPullParser.END_DOCUMENT){//只要不是文檔結束事件<br />switch (eventType) {<br />case XmlPullParser.START_DOCUMENT://其實就是<persons><br />persons = new ArrayList<Person>();<br />break;</p><p>case XmlPullParser.START_TAG://其實就是<person <name <age<br />String name = parser.getName();//擷取解析器當前指向的元素的名稱<br />if("person".equals(name)){<br />person = new Person();<br />person.setId(new Integer(parser.getAttributeValue(0)));<br />}<br />if(person!=null){<br />if("name".equals(name)){<br />person.setName(parser.nextText());//擷取解析器當前指向元素的下一個文本節點的值<br />}<br />if("age".equals(name)){<br />person.setAge(new Short(parser.nextText()));<br />}<br />}<br />break;</p><p>case XmlPullParser.END_TAG://其實就是</person> </age> </name><br />if("person".equals(parser.getName())){<br />persons.add(person);<br />person = null;<br />}<br />break;<br />}<br />eventType = parser.next();<br />}<br />return persons;<br />}
<?xml version="1.0" encoding="UTF-8"?><br /><persons><br /><person id="23"><br /><name>liming</name><br /><age>30</age><br /></person><br /><person id="20"><br /><name>lixiangmei</name><br /><age>25</age><br /></person><br /></persons><br />
附加使用pull寫xml:
public static void save(List<Person> persons, Writer writer){<br />XmlSerializer serializer = Xml.newSerializer();<br />serializer.setOutput(writer);<br />serializer.startDocument("UTF-8", true);</p><p>serializer.startTag(null, "persons");<br />for(Person person : persons){<br />serializer.startTag(null, "person");<br />serializer.attribute(null, "id", person.getId().toString());</p><p>serializer.startTag(null, "name");<br />serializer.text(person.getName());<br />serializer.endTag(null, "name");</p><p>serializer.startTag(null, "age");<br />serializer.text(person.getAge().toString());<br />serializer.endTag(null, "age");</p><p>serializer.endTag(null, "person");<br />}<br />serializer.endTag(null, "persons");<br />serializer.endDocument();<br />writer.flush();<br />writer.close();<br />}