Android 解析XML文件 (SAX与PULL)
来源:互联网 发布:gpt转mbr数据会丢失吗 编辑:程序博客网 时间:2024/04/30 04:53
一、首先创建一个需要解析的person.xml 文件
<?xml version="1.0" encoding="UTF-8"?><persons><person id="20"><name>MacDroid</name><age>22</age></person><person id="30"><name>Vect</name><age>28</age></person></persons>
二、创建Person.java用来对应解析出来的对象
public class Person {public int id;public String name;public int age;@Overridepublic String toString() {return "id : " + id + " name : " + name + " age " + age;}}
三、这一点是关键,解析刚才创建的person.xml文件
(1)使用SAX解析方式
public class SAXParse {public List<Person> readXml(InputStream is) {try {SAXParser mSAXParser = SAXParserFactory.newInstance().newSAXParser();PersonHandler mPersonHandler = new PersonHandler();mSAXParser.parse(is, mPersonHandler);is.close();return mPersonHandler.getPersons();} catch (Exception e) {e.printStackTrace();}return null;}private final class PersonHandler extends DefaultHandler {private List<Person> list = null;private String tag = null;private Person person;@Overridepublic void startDocument() throws SAXException {list = new ArrayList<Person>();}@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {if ("person".equals(localName)) {person = new Person();person.id = Integer.parseInt(attributes.getValue(0));}tag = localName;}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {if ("person".equals(localName)) {list.add(person);person = null;}tag = null;}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {if (tag != null) {String data = new String(ch, start, length);if ("name".equals(tag)) {person.name = data;} else if ("age".equals(tag)) {person.age = Integer.parseInt(data);}}}public List<Person> getPersons() {return this.list;}}}(2)使用PULL解析方式
public class PullParse {private List<Person> list;public List<Person> getPersons(InputStream is) {XmlPullParser mXmlPullParser = Xml.newPullParser();Person person = null;try {mXmlPullParser.setInput(is, "UTF-8");// 产生第一个事件int eventType = mXmlPullParser.getEventType();while (eventType != XmlPullParser.END_DOCUMENT) {switch (eventType) {case XmlPullParser.START_DOCUMENT:list = new ArrayList<Person>();break;case XmlPullParser.START_TAG:// 得到解析器当前指向元素节点的便签名String name = mXmlPullParser.getName();if ("person".equals(name)) {person = new Person();person.id = Integer.parseInt(mXmlPullParser.getAttributeValue(0));} else if (person != null) {if ("name".equals(name)) {// 得到解析器当前指向元素节点的下一个文本节点person.name = mXmlPullParser.nextText();} else if ("age".equals(name)) {person.age = Integer.parseInt(mXmlPullParser.nextText());}}break;case XmlPullParser.END_TAG:if ("person".equals(mXmlPullParser.getName())) {list.add(person);person = null;}break;}eventType = mXmlPullParser.next();}} catch (Exception e) {e.printStackTrace();}return list;}}最后自己的定义Activity中测试这两种解析方式
public class SAXParseDemoActivity extends Activity {/** Called when the activity is first created. */@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); try{ testSAXParse(); testPullParse(); }catch(Exception e){ } }public void testSAXParse() throws IOException { InputStream is =this.getAssets().open("person.xml"); SAXParse mSaxParser = new SAXParse(); List<Person> list = mSaxParser.readXml(is); Log.i("testSAXParse", "size = " + list.size());for(Person p : list) System.out.println(p); } public void testPullParse() throws IOException{InputStream is =this.getAssets().open("person.xml"); PullParse mPullParse = new PullParse();List<Person> list = mPullParse.getPersons(is);Log.i("testPullParse", "size = " + list.size());for(Person p : list) System.out.println(p); } }
最后运行出来的结果:
I/System.out( 1943): id : 20 name : MacDroid age 22
I/System.out( 1943): id : 30 name : Vect age 28
I/testPullParse( 1943): size = 2
I/System.out( 1943): id : 20 name : MacDroid age 22
I/System.out( 1943): id : 30 name : Vect age 28
代码实现下载地址:http://download.csdn.net/my/uploads
- Android 解析XML文件 (SAX与PULL)
- Android 解析XML文件 (SAX与PULL)
- Android中xml文件解析 SAX方式 与 PULL方式
- Android xml文件解析 SAX,DOM,PULL
- Android-解析XML(Dom,Sax,Pull)
- Android解析xml(DOM SAX PULL)
- android 解析XML(Pull、SAX)
- Android解析XML(DOM解析,SAX解析,PULL解析)
- Android开发:XML解析与DOM、SAX、PULL解析对比
- Xml解析(SAX & Pull)
- Android 中利用SAX ,Dom,pull解析 XML 文件
- android中解析XML文件方式—DOM SAX PULL
- Android 使用SAX或者DOM或者pull解析XML文件
- Android 使用SAX或者DOM或者pull解析XML文件
- Android 利用DOM,SAX,PULL解析xml文件
- 数据存储-XML文件(DOM/SAX/PULL解析)
- Dom、Sax、Pull解析xml文件
- pull和sax解析xml文件
- SHELL编程:利用CSIDL打开特殊文件夹
- C++类成员函数指针的使用实例
- 安卓手机/电脑剪贴板同步工具
- Defensive programming
- 提高班第一次实训——拆装机
- Android 解析XML文件 (SAX与PULL)
- JUnit基础入门
- 求1到n的所有正整数中1出现的次数
- ASP 枟 --Sachiel【笔记】
- C++的五种内存存储区
- 互芯平台短信发送实现
- 记一次线上分布式redis服务BUG发现与修复过程
- PIMPL
- hdu 1331 Function Run Fun