Sax 读取xml ,读取较快,最重要的是占用内存较少.

为了防止自己遗忘.留下我今天的足迹.也供大家参考.如果有误.请指正.

首先 在src 根目录下面创建一个Person.xml 文件.里面添加内容:

1.Person.xml

View Code
<?xml version="1.0" encoding="UTF-8"?><persons>    <person id="23">        <name>关大爷</name>        <age>19</age>    </person>    <person id="20">        <name>张飞</name>        <age>18</age>    </person>      <person id="19">        <name>主公</name>        <age>20</age>    </person></persons>

2.写一个 读取xml的personbean

Person

View Code
package com.example.bean;public class Person {    private int _id;    private String _name;    private int _age;        public int get_id() {        return _id;    }    public void set_id(int _id) {        this._id = _id;    }    public String get_name() {        return _name;    }    public void set_name(String _name) {        this._name = _name;    }    public int get_age() {        return _age;    }    public void set_age(int _age) {        this._age = _age;    }    /* (non-Javadoc)     * @see java.lang.Object#toString()     */    @Override    public String toString() {        return "Person [_id=" + _id + ", _name=" + _name + ", _age=" + _age+ "]";    }}

3.添加一个 personservice 类

View Code
package com.example.service;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import org.xml.sax.XMLReader;import org.xml.sax.helpers.DefaultHandler;import com.example.bean.Person;import android.R.integer;import android.sax.Element;import android.sax.EndElementListener;import android.sax.RootElement;import android.sax.StartElementListener;import android.util.Log;public class SaxService {        private   Person p;        public List<Person> readxml(InputStream stream) throws Throwable, SAXException{        SAXParserFactory factory=SAXParserFactory.newInstance();        SAXParser  parser=factory.newSAXParser();        PersonHander dh=new PersonHander();         parser.parse(stream, dh);        return  dh.getPersons();    }        private class PersonHander extends DefaultHandler{         private List<Person> persons=null;         /**         * @return the persons         */        public List<Person> getPersons() {            return persons;        }                // 读取顺序        // startDocument()  startElement()  characters(), endElement(), endDocument()                private String pretag=null;         private Person p=null;        /* (non-Javadoc)         * @see org.xml.sax.helpers.DefaultHandler#startDocument()         */        @Override        public void startDocument() throws SAXException {            persons =new ArrayList<Person>();        }                /* (non-Javadoc)         * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)         */        @Override        public void startElement(String uri, String localName, String qName,                Attributes attributes) throws SAXException {            if("person".equals(localName)){                p=new Person();             p.set_id( new Integer(attributes.getValue(0)));            }            //此步执行完毕后 会执行 characters(char[] ch, int start, int length)            pretag=localName; //添加一个表示        }                        /* (non-Javadoc)         * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)         */        @Override        public void characters(char[] ch, int start, int length)                throws SAXException {         if(pretag!=null)         {             String data=new String(ch, start, length);             if("name".equals(pretag)){                 p.set_name(data);             }else if("age".equals(pretag)){                 p.set_age(new Integer(data));             }         }         //继续执行  endElement(String uri, String localName, String qName)        }        /* (non-Javadoc)         * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String)         */        @Override        public void endElement(String uri, String localName, String qName)                throws SAXException {            if("person".equals(localName)){                persons.add(p);                p=null;             }                        pretag=null;            // 清空数据,(多条记录)重复开始执行 startElement(String uri, String localName, String qName,         }    }}

4.进行单元测试

persontest

View Code
package com.example.unit;import java.io.InputStream;import java.util.List;import org.xml.sax.SAXException;import android.test.AndroidTestCase;import android.util.Log;import com.example.bean.Person;import com.example.service.SaxService;public class persontest  extends AndroidTestCase{    public void test() throws Throwable, Throwable    {        SaxService ss=new SaxService();        InputStream stream= this.getClass().getClassLoader().getResourceAsStream("Person.xml");        List<Person> P=    ss.readxml(stream);        for(Person p : P){            Log.i("test",   p.toString());        }    }}

进行单元测试 需要在配置文件中加入两段代码

View Code
<manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.sax_xml"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="15" />    <application        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/title_activity_main" >            ......        </activity>    </application>       <!-- 加入下面这句  --><instrumentation android:name="android.test.InstrumentationTestRunner"      android:targetPackage="com.example.sax_xml" android:label="Tests for My App" /></manifest>

运行结果:

读取成功.

源码:http://files.cnblogs.com/xyong/Sax_Xml.rar

更多相关文章

  1. 【Android(安卓)Developers Training】 7. 添加Action Buttons
  2. Android(安卓)8.0 高通代码预制apk可卸载,恢复出厂设置apk可恢复
  3. 异步加载注意的事项
  4. Android9.0 SIM卡初始化---更新数据(代码 高通9.0代码)
  5. 单独编译Android(安卓)app模块
  6. Android(安卓)studio 添加依赖库的方法
  7. 【Android(安卓)studio】为按钮添加简单事件
  8. Android应用启动优化:一种DelayLoad的实现和原理
  9. Android百度地图之页面跳转

随机推荐

  1. Android(安卓)资源(resource)学习小结
  2. Android(安卓)Instrumentation Testing
  3. Android在中国的发展分析
  4. Android音频开发(1):基础知识
  5. 如何在Android和iOS设备上录制游戏?
  6. Android状态栏黑色字体
  7. Android菜单详解(一)——理解android中的Me
  8. Android系统框架和几种调用流程
  9. Android(安卓)亮度调节
  10. Android上的C/C++调用Java问题(转载)