android 使用Sax 读取xml
16lz
2021-01-26
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 Codepackage 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 Codepackage 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 Codepackage 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
更多相关文章
- 【Android(安卓)Developers Training】 7. 添加Action Buttons
- Android(安卓)8.0 高通代码预制apk可卸载,恢复出厂设置apk可恢复
- 异步加载注意的事项
- Android9.0 SIM卡初始化---更新数据(代码 高通9.0代码)
- 单独编译Android(安卓)app模块
- Android(安卓)studio 添加依赖库的方法
- 【Android(安卓)studio】为按钮添加简单事件
- Android应用启动优化:一种DelayLoad的实现和原理
- Android百度地图之页面跳转