Android中使用PULL方式解析XML文件深入介绍
程序员文章站
2023-12-15 11:24:10
一、基本介绍 android中极力推荐xmlpull方式解析xml。 xmlpull不仅可用在android上同样也适用于javase,但在javase环境中需自己获取xm...
一、基本介绍
android中极力推荐xmlpull方式解析xml。
xmlpull不仅可用在android上同样也适用于javase,但在javase环境中需自己获取xmlpull所依赖的类库,kxml2-2.3.0.jar,xmlpull_1_1_3_4c.jar。
jar包下载网址
http://www.xmlpull.org/
http://kxml.sourceforge.net/
二、例子
读取到xml的声明返回数字0 start_document;
读取到xml的结束返回数字1 end_document ;
读取到xml的开始标签返回数字2 start_tag
读取到xml的结束标签返回数字3 end_tag
读取到xml的文本返回数字4 text
<?xml version="1.0" encoding="utf-8"?>
<people>
<person id="001">
<name>xy1</name>
<age>22</age>
</person>
<person id="002">
<name>xy2</name>
<age>22</age>
</person>
</people>
public class personservice
{
/**
* 从xml文件中读取数据
*
* @param xml xml文件输入流
*/
public list<person> getpeople(inputstream xml) throws exception
{
list<person> lst = null;
person person = null;
// 获得pull解析器工厂
xmlpullparserfactory pullparserfactory = xmlpullparserfactory.newinstance();
//获取xmlpullparser的实例
xmlpullparser pullparser = pullparserfactory.newpullparser();
// 设置需要解析的xml数据
pullparser.setinput(xml, "utf-8");
// 取得事件
int event = pullparser.geteventtype();
// 若为解析到末尾
while (event != xmlpullparser.end_document) // 文档结束
{
// 节点名称
string nodename = pullparser.getname();
switch (event)
{
case xmlpullparser.start_document: // 文档开始
lst = new arraylist<person>();
break;
case xmlpullparser.start_tag: // 标签开始
if ("person".equals(nodename))
{
string id = pullparser.getattributevalue(0);
person = new person();
person.setid(id);
}
if ("name".equals(nodename))
{
string name = pullparser.nexttext();
person.setname(name);
}
if ("age".equals(nodename))
{
int age = integer.valueof(pullparser.nexttext());
person.setage(age);
}
break;
case xmlpullparser.end_tag: // 标签结束
if ("person".equals(nodename))
{
lst.add(person);
person = null;
}
break;
}
event = pullparser.next(); // 下一个标签
}
return lst;
}
}
android中极力推荐xmlpull方式解析xml。
xmlpull不仅可用在android上同样也适用于javase,但在javase环境中需自己获取xmlpull所依赖的类库,kxml2-2.3.0.jar,xmlpull_1_1_3_4c.jar。
jar包下载网址
http://www.xmlpull.org/
http://kxml.sourceforge.net/
二、例子
读取到xml的声明返回数字0 start_document;
读取到xml的结束返回数字1 end_document ;
读取到xml的开始标签返回数字2 start_tag
读取到xml的结束标签返回数字3 end_tag
读取到xml的文本返回数字4 text
复制代码 代码如下:
<?xml version="1.0" encoding="utf-8"?>
<people>
<person id="001">
<name>xy1</name>
<age>22</age>
</person>
<person id="002">
<name>xy2</name>
<age>22</age>
</person>
</people>
复制代码 代码如下:
public class personservice
{
/**
* 从xml文件中读取数据
*
* @param xml xml文件输入流
*/
public list<person> getpeople(inputstream xml) throws exception
{
list<person> lst = null;
person person = null;
// 获得pull解析器工厂
xmlpullparserfactory pullparserfactory = xmlpullparserfactory.newinstance();
//获取xmlpullparser的实例
xmlpullparser pullparser = pullparserfactory.newpullparser();
// 设置需要解析的xml数据
pullparser.setinput(xml, "utf-8");
// 取得事件
int event = pullparser.geteventtype();
// 若为解析到末尾
while (event != xmlpullparser.end_document) // 文档结束
{
// 节点名称
string nodename = pullparser.getname();
switch (event)
{
case xmlpullparser.start_document: // 文档开始
lst = new arraylist<person>();
break;
case xmlpullparser.start_tag: // 标签开始
if ("person".equals(nodename))
{
string id = pullparser.getattributevalue(0);
person = new person();
person.setid(id);
}
if ("name".equals(nodename))
{
string name = pullparser.nexttext();
person.setname(name);
}
if ("age".equals(nodename))
{
int age = integer.valueof(pullparser.nexttext());
person.setage(age);
}
break;
case xmlpullparser.end_tag: // 标签结束
if ("person".equals(nodename))
{
lst.add(person);
person = null;
}
break;
}
event = pullparser.next(); // 下一个标签
}
return lst;
}
}
推荐阅读