xml文件如下:

<?xml version="1.0" encoding="utf-8"?><persons><person id="1"><name>zhangsan</name><age>11</age></person><person id="2"><name>lisi</name><age>18</age></person><person id="3"><name>wangwu</name><age>20</age></person></persons>

解析代码如下:

package com.pdsu.file.xml;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.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import org.xmlpull.v1.XmlSerializer;import android.util.Xml;/** * 采用pull方式解析xml文件 *  * @author huangyinge *  */public class PersonXML {/** * 读取xml文件 *  * @param is *            xml文件输入流 * @return person列表 * @throws XmlPullParserException */public List<Person> readXML(InputStream is) throws Exception {List<Person> persons = null;Person person = null;// 得到xmlpull解析器XmlPullParser xmlPull =XmlPullParserFactory.newInstance().newPullParser();xmlPull.setInput(is, "UTF-8");int eventType = xmlPull.getEventType();// 循环遍历每个元素只到文档末尾while (eventType != XmlPullParser.END_DOCUMENT) {switch (eventType) {case XmlPullParser.START_DOCUMENT:// 文档开始,只执行一次persons = new ArrayList<Person>();break;case XmlPullParser.START_TAG: {// 标签开始if ("person".equals(xmlPull.getName())) {int id = Integer.parseInt(xmlPull.getAttributeValue(0));person = new Person();person.setId(id);}if ("name".equals(xmlPull.getName())) {String name = xmlPull.nextText();person.setName(name);}if ("age".equals(xmlPull.getName())) {int age = Integer.parseInt(xmlPull.nextText());person.setAge(age);}break;}case XmlPullParser.END_TAG: {if ("person".equals(xmlPull.getName())) {persons.add(person);person =null;}break;}}eventType = xmlPull.next();}return persons;}/** * 保存xml文件 * @param persons  * @throws Exception */public void saveXML(List<Person> persons,OutputStream os) throws Exception{XmlSerializer xmlSerializer = XmlPullParserFactory.newInstance().newSerializer();xmlSerializer.setOutput(os,"UTF-8");xmlSerializer.startDocument("UTF-8", true);xmlSerializer.startTag(null, "persons");for(Person person:persons){xmlSerializer.startTag(null, "person");xmlSerializer.attribute(null, "id", String.valueOf(person.getId()));xmlSerializer.startTag(null, "name");xmlSerializer.text(person.getName());xmlSerializer.endTag(null, "name");xmlSerializer.startTag(null, "age");xmlSerializer.text(String.valueOf(person.getAge()));xmlSerializer.endTag(null, "age");xmlSerializer.endTag(null, "person");}xmlSerializer.endTag(null, "persons");xmlSerializer.endDocument();os.flush();os.close();}}
测试类代码:

package com.pdsu.file.xml;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.junit.Test;import android.test.AndroidTestCase;import com.pdsu.file.xml.Person;import com.pdsu.file.xml.PersonXML;public class PersonXMLTest extends AndroidTestCase{@Testpublic void testReadXML() throws Exception{InputStream is = this.getClass().getClassLoader().getResourceAsStream("person.xml");PersonXML personXml = new PersonXML();List<Person> persons = personXml.readXML(is);for(Person person :persons){System.out.println(person);}}@Test public void save() throws Exception{List<Person> persons = new ArrayList<Person>();persons.add(new Person(1,"name1",11));persons.add(new Person(2,"name2",112));persons.add(new Person(3,"name3",113));persons.add(new Person(4,"name4",114));PersonXML personXml = new PersonXML();FileOutputStream fos = new FileOutputStream(getContext().getFilesDir()+File.separator+"person.xml"); personXml.saveXML(persons, fos);}}



更多相关文章

  1. Android Studio生成APK文件名带上版本号等信息
  2. Android开源项目源代码分享
  3. android文件管理器(1)
  4. 在android中获取文件的MD5值
  5. android获取assert资源文件
  6. 如何用代码区分android TV和手机? 适配Android TV ?
  7. Android Studio 导.so文件简单、高效的方法

随机推荐

  1. Android 基础
  2. android 下载网络pdf文件后并显示
  3. Android 关于EditText文字的显示问题 和
  4. Android提高第八篇之SQLite分页读取
  5. Android中程序与Service交互的方式——总
  6. RN集成自签名https及双向认证-android(2)
  7. 使用扩展名获取mimetype
  8. Android Low memory killer
  9. Android控件抖动效果
  10. AsyncTask异步执行