解析xml文件的方式有多种,比如SAX解析,DOM解析,PULL解析,但是在android中推荐使用pull解析方式来解析xml文件
pull解析器使用实验代码:
Person.java

package com.dqpi.model;public class Person {    private Integer id;    private String name;    private Integer age;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    @Override    public String toString() {        return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";    }    public Person(Integer id, String name, Integer age) {        super();        this.id = id;        this.name = name;        this.age = age;    }    public Person() {        super();    }}

PersonService.java

package com.dqpi.service;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.XmlPullParserFactory;import org.xmlpull.v1.XmlSerializer;import com.dqpi.model.Person;import android.util.Xml;/** * 使用pull解析器对person.xml文件进行解析 * @author Administrator * */public class PersonService {    /** * 使用pull解析器解析xml文件 * @param xml要解析的xml文件 * @return返回解析的内容 * @throws Exception抛出的异常 */    public static List<Person> getPersons(InputStream xml) throws Exception {        //用来存储解析的内容        List<Person> persons = null;        //用来设置person属性内容        Person person = null;        // 创建pull解析器的对象        XmlPullParser pullParser = XmlPullParserFactory.newInstance().newPullParser();        // 为pull解析器设置解析的xml数据        pullParser.setInput(xml, "UTF-8");        // 获取开始节点        int event = pullParser.getEventType();        //当没有解析到XML文件的末尾的时候继续执行解析        while (event != XmlPullParser.END_DOCUMENT) {            switch (event) {            case XmlPullParser.START_DOCUMENT:                //对persons 和person进行初始化                persons = new ArrayList<Person>();                break;            case XmlPullParser.START_TAG:                if ("person".equals(pullParser.getName())) {                    int id = new Integer(pullParser.getAttributeValue(0));                    person = new Person();                    person.setId(id);                }                if ("name".equals(pullParser.getName())) {                    String name = pullParser.nextText();                    person.setName(name);                }                if ("age".equals(pullParser.getName())) {                    int age = new Integer(pullParser.nextText());                    person.setAge(age);                }                break;            case XmlPullParser.END_TAG:                if ("person".equals(pullParser.getName())) {                    persons.add(person);                    person = null;                }                break;            }            //触发下一个节点            event = pullParser.next();        }        return persons;    }    /** * 生成xml文件 * @param persons生成xml的件的数据来源 * @param outputStream文件输出的对象 * @throws Exception抛出的异常 */    public static void save(List<Person> persons,OutputStream outputStream)throws Exception{        XmlSerializer serializer = Xml.newSerializer();        //设置输出的方向        serializer.setOutput(outputStream, "UTF-8");        //开始文档        serializer.startDocument("UTF-8", true);        //文档开始节点        serializer.startTag(null, "persons");        for(Person person:persons){            //person            serializer.startTag(null, "person");            serializer.attribute(null, "id", person.getId().toString());            //name            serializer.startTag(null, "name");            serializer.text(person.getName());            serializer.endTag(null, "name");            //age            serializer.startTag(null, "age");            serializer.text(person.getAge().toString());            serializer.endTag(null, "age");            serializer.endTag(null, "person");        }        //文档结束节点        serializer.endTag(null, "persons");        //结束文档        serializer.endDocument();        //把数据刷出去        outputStream.flush();        //关闭        outputStream.close();    }}

PersonServiceTest.java

package com.dqpi.test;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import com.dqpi.model.Person;import com.dqpi.service.PersonService;import android.test.AndroidTestCase;import android.util.Log;public class PersonServiceTest extends AndroidTestCase {    private static final String TAG="PersonServiceTest";    public void testPersons()throws Exception{        InputStream xml = this.getClass().getClassLoader().getResourceAsStream("person.xml");        List<Person> persons = PersonService.getPersons(xml);        for(Person person:persons){            Log.i(TAG, person.toString());        }    }     public void testSave()throws Exception{        List<Person> persons = new ArrayList<Person>();        persons.add(new Person(1,"张三",14));        persons.add(new Person(2,"李四",15));        persons.add(new Person(2,"赵六",20));        //存储在<包名>/file        File xmlFile = new File(getContext().getFilesDir(),"dqpi.xml");        FileOutputStream outputStream = new FileOutputStream(xmlFile);        PersonService.save(persons, outputStream);    } }

person.xml

<?xml version="1.0" encoding="UTF-8"?><persons>    <person id="23">        <name>liming</name>        <age>30</age>     </person>    <person id="20">        <name>zhangsan</name>        <age>20</age>     </person></persons>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.dqpi.xml" android:versionCode="1" android:versionName="1.0" >    <uses-sdk  android:minSdkVersion="14" android:targetSdkVersion="22" />    <application  android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >        <uses-library android:name="android.test.runner"/>        <activity  android:name=".MainActivity" android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application><instrumentation android:label="Tests for My App" android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.dqpi.xml" /></manifest>

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. android从服务器下载文件(php+apache+win7+MySql)
  4. android引入so文件常见问题
  5. android与.NET webservice
  6. Android动画效果——X、Y轴抖动
  7. Android(安卓)常用组价申明及使用简集
  8. Android开机启动分析(一)logo的显示
  9. Android中使用Gson解析JSON数据

随机推荐

  1. Android平台 | 零代码快速集成AGC云托管
  2. 0401作业-解构与访问器属性
  3. 如何使用PhotoNinja进行图像之间的复制粘
  4. 论IT安全组的重要性
  5. 20210121 Linux系统及安装
  6. 解锁苹果Mac计算器的隐藏功能,不止加减乘
  7. SQL_2008数据镜像灾难恢复和搭建镜像服务
  8. 做运维都干什么?
  9. go 语言学习之初步认识
  10. NextCloud13.0.1升级到 14.0.12遇到的报