您的位置:首页 > 移动开发 > Android开发

Android pull解析XML数据

2011-11-09 23:53 441 查看
本文出自:http://blog.csdn.net/hosterZhu/article/details/6127436(在关于数据处理方面,该博客有很多很好的文章!)



除了可以使用 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 + "]";

}

}

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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: