除了可以使用 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; } }

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. 读取android手机流量信息
  4. android 使用html5作布局文件: webview跟javascript交互
  5. Android(安卓)多媒体扫描过程(Android(安卓)Media Scanner Proces
  6. android“设置”里的版本号
  7. Android开发环境搭建
  8. Android(安卓)Resource介绍和使用
  9. "Failed to fetch URL https://dl-ssl.google.com/android/repos

随机推荐

  1. VUE3学习,购物车结算练习
  2. Windows为什么会出现端口占用?如何处理端
  3. 百度地图:"status":240,"message":"APP 服
  4. php常用的数组函数和字符串函数
  5. k8s.gcr.io、gcr.io仓库的镜像下载
  6. js获取指定类名的标签集合
  7. html与php的区别是什么
  8. 意派Epub360丨点燃圣诞营销灵感,从看完这
  9. phpStorm2021.3 , 这样激活永久有效,不妨
  10. 如何绘制躯干?人体结构比例躯干画法