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;
}
}
除了可以使用 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;
}
}
相关文章推荐
- Android进阶——使用Pull解析和生成轻量级数据XML
- android之xml数据解析(Pull)
- Android笔记(四十六) Android中的数据存储——XML(二)PULL解析
- Android中pull解析和生成xml数据到一个字符串中
- Android中pull解析和生成xml数据到一个字符串中
- android JSON与XmlPullParse解析网络连接数据
- android 学习笔记 Pull 解析XML 格式数据。
- Android 通过Dom, Sax, Pull解析网络xml数据
- Android数据存储---Pull解析Xml文件
- Android数据存储---Pull解析Xml文件
- Android数据存储之XmlPull解析XML文件(输出部分)
- Android数据存储——2.文件存储_E_Pull解析XML文档
- Android中使用xml保存数据(xml文件序列化)及使用pull解析xml文件
- Android之使用Pull解析Xml数据
- Android XML解析Pull方式———解析网络数据示例
- Android数据存储——2.文件存储_E_Pull解析XML文档
- Android - 使用XmlPullParser解析从服务器得到的Xml数据
- Android数据存储之XmlPull解析XML文件(读取部分)
- Android XML数据解析——pull技术
- android 用pull解析xml文件