XML解析方式一般有DOM解析,SAX解析,而Android中推荐的解析方式是PULL解析,以下是最近写的一个Demo中的关键代码。

import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlSerializer;import android.os.Environment;import android.util.Xml;public class PersonXmlPullParserAndXmlSerializer {public ArrayList<Person> XmlPullParserTest() throws Exception {//创建一个InputStream通过反射得到当前累的对象然后getClassLoader().getResourceAsStream();InputStream is = PersonXmlPullParserAndXmlSerializer.class.getClassLoader().getResourceAsStream("persons.xml");//Xml.newPullParser()得到一个XmlPullParserXmlPullParser xpp = Xml.newPullParser();//设置要解析的目标和读取的编码xpp.setInput(is, "UTF-8");ArrayList<Person> listPerson = new ArrayList<Person>();Person p = null;for (int i = xpp.getEventType(); i != XmlPullParser.END_DOCUMENT; i = xpp.next()) {switch (i) {case XmlPullParser.START_TAG:if (xpp.getName() == "person") {String str = xpp.getAttributeValue(0);p = new Person();p.setId(Integer.parseInt(str));} else if (xpp.getName().equals("name")) {p.setName(xpp.nextText());} else if (xpp.getName().equals("age")) {p.setAge(Integer.parseInt(xpp.nextText()));}break;case XmlPullParser.END_TAG://遍历Xml文件中一个对象,直到解析到这个对象的if (xpp.getName().equals("person")) {listPerson.add(p);}break;}}return listPerson;}public void XmlSerializerTest(List<Person> persons) throws Exception {OutputStream os = new FileOutputStream(new File(Environment.getExternalStorageDirectory(), "persons.xml"));XmlSerializer serializer = Xml.newSerializer();serializer.setOutput(os, "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.endDocument();}}

更多相关文章

  1. 26、从头学Android之多媒体--使用MediaRecorder录制音频
  2. Android(安卓)多线程之HandlerThread 完全详解
  3. Android初级教程八——TextView编程实现颜色变换
  4. 深入理解FragmentManager
  5. Android(安卓)ViewDragHelper
  6. Android(安卓)6.0 权限申请源码解析
  7. Android(安卓)第八天 (上午)
  8. Android(安卓)RoboGuice 使用指南(16):Standard Injection
  9. Android笔记:Android(安卓)使用Intent拨打电话的两种方式以及差别

随机推荐

  1. Android(安卓)build System
  2. android中添加级联更新的下拉菜单
  3. Android放大镜的实现
  4. Android(安卓)Wifi的一些属性
  5. html5写链接打开ios
  6. android项目迁移到androidX:类映射(android
  7. Android退出多个Activity的两个经典方法
  8. Android创建文件夹及文件并写入数据
  9. Android(安卓)Process生命周期
  10. android之布局xml各种控件属性详解