Android pull解析XML数据

 

除了可以使用 SAX或DOM解析XML文件之外,大家也可以使用Android内置的Pull解析器解析XML文件。 Pull解析器是一个开源的java项目,既可以用于android,也可以用于JavaEE。如果用在javaEE需要把其jar文件放入类路径中,因为Android已经集成进了Pull解析器,所以无需添加任何jar文件。android系统本身使用到的各种xml文件,其内部也是采用Pull解析器进行解析的。 Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。跟SAX不同的是, Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。 使用Pull解析器读取itcast.xml的代码在本页下方备注 Pull解析器的源码及文档下载网址:http://www.xmlpull.org/

 

 

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

 

package com.zyq.voo; public class Person { private Integer id; private String name; private Short 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 Short getAge() { return age; } public void setAge(Short age) { this.age = age; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; } }

 

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.zyq.xml" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <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> <uses-sdk android:minSdkVersion="8" /> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.zyq.xml" android:label="Tests for My App" /> </manifest>

 

package com.zyq.xml; import java.io.InputStream; import java.util.List; import com.zyq.service.DOMPersonService; import com.zyq.service.PullPersonService; import com.zyq.service.SAXPersonService; import com.zyq.voo.Person; import android.test.AndroidTestCase; import android.util.Log; public class PersonServiceTest extends AndroidTestCase { private static final String TAG="PersonServiceTest"; public void testSAX() throws Throwable { SAXPersonService personService=new SAXPersonService(); InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("person.xml"); List<Person> persons=personService.getPersons(inputStream); for(Person person : persons) { Log.i(TAG, person.toString()); } } public void testDOM() throws Throwable { DOMPersonService personService=new DOMPersonService(); InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("person.xml"); List<Person> persons=personService.getPersons(inputStream); for(Person person : persons) { Log.i(TAG, person.toString()); } } public void testPull() throws Throwable { PullPersonService personService=new PullPersonService(); InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("person.xml"); List<Person> persons=personService.getPersons(inputStream); for(Person person : persons) { Log.i(TAG, person.toString()); } } }

 

package com.zyq.service; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import android.util.Xml; import com.zyq.voo.Person; /** * 采用官方PULL解析器 解析XML数据 * @author Administrator * */ public class PullPersonService { /** * 采用官方PULL解析器 解析XML数据 * @param inputStream person.xml * @return persons List集合 * @throws Throwable */ public List<Person> getPersons(InputStream inputStream) throws Throwable { List<Person> persons=null; Person person=null; XmlPullParser parser=Xml.newPullParser(); parser.setInput(inputStream, "utf-8"); int event=parser.getEventType(); while(event!=XmlPullParser.END_DOCUMENT) { switch (event) { case XmlPullParser.START_DOCUMENT: persons=new ArrayList<Person>(); break; case XmlPullParser.START_TAG: if("person".equals(parser.getName())) { person=new Person(); Integer id=new Integer(parser.getAttributeValue(0)); person.setId(id); } if(person!=null) { if("name".equals(parser.getName())) { String name=parser.nextText().toString(); person.setName(name); } else if("age".equals(parser.getName())) { Short age=new Short(parser.nextText().toString()); person.setAge(age); } } break; case XmlPullParser.END_TAG: if("person".equals(parser.getName())) { persons.add(person); person=null; } break; default: break; } event=parser.next(); } return persons; } }

 

你可能感兴趣的:(Android pull解析XML数据)