首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

Android解析XML形式(二)使用PULL解析XML

2013-03-01 
Android解析XML方式(二)使用PULL解析XML在前一篇中介绍了使用SAX解析XML,本篇来讲一下如何使用JAVA自带的P

Android解析XML方式(二)使用PULL解析XML

在前一篇中介绍了使用SAX解析XML,本篇来讲一下如何使用JAVA自带的PULL来解析XML数据,以及它们的各自优点在哪里。

首先来看一下什么是PULL解析器以及它的基本特征:

PULL解析器的运行方式和SAX解析器很相似,它提供了类似的事件,如:开始元素和结束元素,使用parser,next() 可以进入下一个元素并且触发相应的事件,事件将作为代码被发送,因此可以使用一个switch来对事件进行选择,然后进行相应的处理。当开始解析元素的时候,调用parser.nextText()方法可以获得下一个Text类型的元素。

相对而言,使用PULL来解析比SAX要写的代码少很多,使用比较简单。

PULL的特点:

一、简单的结构:一个接口、一个例外、一个工厂组成的PULL解析器

二、简单易用:PULL解析器只有一个重要的方法next方法,他被用来检索下一个事件,而它只有5个常用的属性:

          1、STARTDOCUMENT

          2、START_TAG

          3、TEXT

          4、END_TAG

          5、END_DOCUMENT

 

这里同样通过一个例子来看一下如何使用它,我们建立一个工程Android_XML_PULL

工程目录结构:

Android解析XML形式(二)使用PULL解析XML

源代码如下:

person.xml

<?xml version="1.0" encoding="utf-8"?><persons>    <person id="1">        <name>liming</name>        <age>23</age>    </person>    <person id="2">        <name>zhangsan</name>        <age>32</age>    </person></persons>


Person.java

package com.pull.bean;public class Person {private int id;private String name;private String age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";}}


PersonService.java

package com.pull.service;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import android.util.Xml;import com.pull.bean.Person;public class PersonService {public static List<Person> getPersons(InputStream xml) throws IOException{List<Person> persons = null;Person person = null;XmlPullParser pullParser = Xml.newPullParser();try {pullParser.setInput(xml,"UTF-8");//为PULL解析器设置要解析的XML数据int event = pullParser.getEventType();while(event!=XmlPullParser.END_DOCUMENT){switch (event) {case XmlPullParser.START_DOCUMENT: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())){String age = pullParser.nextText();person.setAge(age);}break;case XmlPullParser.END_TAG:if("person".equals(pullParser.getName())){persons.add(person);person = null;}break;}event = pullParser.next();}} catch (XmlPullParserException e) {e.printStackTrace();}return persons;}}


PersonServiceTest.java

package com.pull.test;import java.io.IOException;import java.io.InputStream;import java.util.List;import com.pull.bean.Person;import com.pull.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 IOException{InputStream xml = this.getClass().getClassLoader().getResourceAsStream("person.xml");List<Person> persons = PersonService.getPersons(xml);for(Person person:persons){Log.i(TAG, person.toString());}}}

AndroidManifest.xml中添加AndroidJunit测试代码:

<uses-library android:name="android.test.runner"/>

<instrumentation android:name="android.test.InstrumentationTestRunner" 
   android:targetPackage="com.pull.activity" android:label="Tests for My App "/>


我们通过运行testPersons()这个测试方法,输出到LogCat的日志记录如下:

Android解析XML形式(二)使用PULL解析XML


热点排行