Android之XML序列化和解析
生活随笔
收集整理的這篇文章主要介紹了
Android之XML序列化和解析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
XML文件是一種常用的文件格式,可以用來存儲(chǔ)與傳遞數(shù)據(jù) ,本文是XML文件序列化與解析的一個(gè)簡(jiǎn)單示例
寫文件到本地,并用XML格式存儲(chǔ)
/*** 寫xml文件到本地*/private void writeXmlToLocal() {List<Person> personList = getPersonList();// 獲得序列化對(duì)象XmlSerializer serializer = Xml.newSerializer();try {File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");FileOutputStream fos = new FileOutputStream(path);// 指定序列化對(duì)象輸出的位置和編碼serializer.setOutput(fos, "utf-8");serializer.startDocument("utf-8", true); // 寫開始 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>serializer.startTag(null, "persons"); // <persons>for (Person person : personList) {// 開始寫人serializer.startTag(null, "person"); // <person>serializer.attribute(null, "id", String.valueOf(person.getId()));// 寫名字serializer.startTag(null, "name"); // <name>serializer.text(person.getName());serializer.endTag(null, "name"); // </name>// 寫年齡serializer.startTag(null, "age"); // <age>serializer.text(String.valueOf(person.getAge()));serializer.endTag(null, "age"); // </age>serializer.endTag(null, "person"); // </person>}serializer.endTag(null, "persons"); // </persons>serializer.endDocument(); // 結(jié)束} catch (Exception e) {e.printStackTrace();}}private List<Person> getPersonList() {List<Person> personList = new ArrayList<Person>();for (int i = 0; i < 30; i++) {personList.add(new Person(i, "wang" + i, 18 + i));}return personList;}XML解析實(shí)現(xiàn)
private List<Person> parserXmlFromLocal() {try {File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");FileInputStream fis = new FileInputStream(path);// 獲得pull解析器對(duì)象XmlPullParser parser = Xml.newPullParser();// 指定解析的文件和編碼格式parser.setInput(fis, "utf-8");int eventType = parser.getEventType(); // 獲得事件類型List<Person> personList = null;Person person = null;String id;while(eventType != XmlPullParser.END_DOCUMENT) {String tagName = parser.getName(); // 獲得當(dāng)前節(jié)點(diǎn)的名稱switch (eventType) {case XmlPullParser.START_TAG: // 當(dāng)前等于開始節(jié)點(diǎn) <person>if("persons".equals(tagName)) { // <persons>personList = new ArrayList<Person>();} else if("person".equals(tagName)) { // <person id="1">person = new Person();id = parser.getAttributeValue(null, "id");person.setId(Integer.valueOf(id));} else if("name".equals(tagName)) { // <name>person.setName(parser.nextText());} else if("age".equals(tagName)) { // <age>person.setAge(Integer.parseInt(parser.nextText()));}break;case XmlPullParser.END_TAG: // </persons>if("person".equals(tagName)) {// 需要把上面設(shè)置好值的person對(duì)象添加到集合中personList.add(person);}break;default:break;}eventType = parser.next(); // 獲得下一個(gè)事件類型}return personList;} catch (Exception e) {e.printStackTrace();}return null;}測(cè)試結(jié)果
public class TestCase extends AndroidTestCase {public void test() { // writeXmlToLocal();List<Person> personList = parserXmlFromLocal();for (Person person : personList) {Log.i("TestCase", person.toString());}}完成
總結(jié)
以上是生活随笔為你收集整理的Android之XML序列化和解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Python 黑科技》10万粉丝头像千
- 下一篇: IOS之计算器实现