在android中怎么使用pullparse解析.xml文件

在android中怎么使用pullparse解析.xml文件,第1张

  Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parsernext()可以进入下一个元素并触发相应事件。跟SAX不同的是, Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parsernextText()方法可以获取下一个Text类型节点的值。

  下面我们通过Demo例子来介绍如何使用PULL机制来解析XML文件。先看下如下工程的目录结构:

  按以下步骤进行操作:

  [1] 新建一个XML文件,命名为studentxml。同时把XML文件放置到assets目录下。studentxml文件的内容如下:

  [html] view plaincopy

  <xml version="10" encoding="utf-8">

  <students>

  <student id="20110806100">

  <name>小明</name>

  <age>22</age>

  <sex>男</sex>

  </student>

  <student id="20110806101">

  <name>小李</name>

  <age>24</age>

  <sex>男</sex>

  </student>

  <student id="20110806102">

  <name>小丽</name>

  <age>21</age>

  <sex>女</sex>

  </student>

  </students>

[2] 根据XML文件中的节点目录,创建一个相对应的实体类,来保存解析的相应信息。在包:comandyideaentity下新建Studentjava类。

  [html] view plaincopy

  package comandyideaentity;

  

  public class Student {

  

  private String id;

  private String name;

  private int age;

  private String sex;

  

  public String getId() {

  return id;

  }

  public void setId(String id) {

  thisid = id;

  }

  public String getName() {

  return name;

  }

  public void setName(String name) {

  thisname = name;

  }

  public int getAge() {

  return age;

  }

  public void setAge(int age) {

  thisage = age;

  }

  public String getSex() {

  return sex;

  }

  public void setSex(String sex) {

  thissex = sex;

  }

  

  }

[3] 定义一个使用PULL解析XML文件的工具类:ParserByPULLjava。

  [html] view plaincopy

  package comandyideautil;

  

  import javaioInputStream;

  import javautilArrayList;

  import javautilList;

  

  import orgxmlpullv1XmlPullParser;

  import orgxmlpullv1XmlPullParserFactory;

  

  import androidutilXml;

  

  import comandyideaentityStudent;

  

  public class ParserByPULL {

  

  //采用XmlPullParser来解析XML文件

  public static List<Student> getStudents(InputStream inStream) throws Throwable

  {

  List<Student> students = null;

  Student mStudent = null;

  

  //========创建XmlPullParser,有两种方式=======

  //方式一:使用工厂类XmlPullParserFactory

  XmlPullParserFactory pullFactory = XmlPullParserFactorynewInstance();

  XmlPullParser parser = pullFactorynewPullParser();

  //方式二:使用Android提供的实用工具类androidutilXml

  //XmlPullParser parser = XmlnewPullParser();

  

  //解析文件输入流

  parsersetInput(inStream, "UTF-8");

  //产生第一个事件

  int eventType = parsergetEventType();

  //只要不是文档结束事件,就一直循环

  while(eventType!=XmlPullParserEND_DOCUMENT)

  {

  switch (eventType)

  {

  //触发开始文档事件

  case XmlPullParserSTART_DOCUMENT:

  students = new ArrayList<Student>();

  break;

  //触发开始元素事件

  case XmlPullParserSTART_TAG:

  //获取解析器当前指向的元素的名称

  String name = parsergetName();

  if("student"equals(name))

  {

  //通过解析器获取id的元素值,并设置student的id

  mStudent = new Student();

  mStudentsetId(parsergetAttributeValue(0));

  }

  if(mStudent!=null)

  {

  if("name"equals(name))

  {

  //获取解析器当前指向元素的下一个文本节点的值

  mStudentsetName(parsernextText());

  }

  if("age"equals(name))

  {

  //获取解析器当前指向元素的下一个文本节点的值

  mStudentsetAge(new Short(parsernextText()));

  }

  if("sex"equals(name))

  {

  //获取解析器当前指向元素的下一个文本节点的值

  mStudentsetSex(parsernextText());

  }

  }

  break;

  //触发结束元素事件

  case XmlPullParserEND_TAG:

  //

  if("student"equals(parsergetName()))

  {

  studentsadd(mStudent);

  mStudent = null;

  }

  break;

  default:

  break;

  }

  eventType = parsernext();

  }

  return students;

  }

  

通过http协议与服务器建立链接。然后服务器返回一个String类型的xml字符串,android客户端把字符串解析成xml就ok具体例子请参考android学习手册。里面有源码。android学习手册包含9个章节,108个例子,源码文档随便看,例子都是可交互,可运行, 源码采用android studio目录结构,高亮显示代码,文档都采用文档结构图显示,可以快速定位。360手机助手中下载,图标上有贝壳。

将xml的信息读出来,比如天气预报,从网上获取的是xml文件,通过xml解析可以把天气状态读出来

例:

<forecast_date data="2009-07-31" />

<condition data="晴" />

<humidity data="湿度: 65%" />(xml文件不全)

可得到 2009-07-31 晴 湿度:65%

还有一作用是保存你的数据,比如做个旅游网站,你需要把全国各个省、城市名称写到xml文件,或者写成json进行保存,在程序中通过解析读取调用。

我用的是PULL解析,SAX,dom感觉都没PULL好用

public class XmlParseService

{

public static List<Person> pullXML(InputStream in)

{

try

{

//创建一个PULL解析对象

//1)XmlPullParser parse= XmlnewPullParser();

XmlPullParserFactory xmlfactory=XmlPullParserFactorynewInstance();

XmlPullParser parse=xmlfactorynewPullParser();

parsesetInput(in, "utf-8");

int eventCode=parsegetEventType();

Person person = null;

List<Person> list = null;

while(eventCode!=XmlPullParserEND_DOCUMENT)

{

switch(eventCode)

{

//开始解析文档

case XmlPullParserSTART_DOCUMENT:

list = new ArrayList<Person>();

Systemoutprintln("1111111开始文档的解析");

break;

case XmlPullParserSTART_TAG:

Systemoutprintln("2222222开始解析标记");

if("person"equals(parsegetName()))

{

person = new Person();

personsetId(parsegetAttributeValue(0));

}

else

{

if("name"equals(parsegetName()))

{

personsetName(parsenextText());

}

else if("age"equals(parsegetName()))

{

personsetAge(parsenextText());

}

}

break;

case XmlPullParserEND_TAG:

Systemoutprintln("33333333结束解析标记");

if("person"equals(parsegetName()))

{

if(person!=null)

{

listadd(person);

person = null;

}

}

break;

}

eventCode = parsenext();

}

inclose();

return list;

}

catch(Exception e)

{

eprintStackTrace();

}

return null;

}

你自己创建一个XML,我用实体类PERSON封装的

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 在android中怎么使用pullparse解析.xml文件

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情