XML解析之pull解析

xml文件格式被广泛的应用在移动开发的网络传输的数据格式,做为Android程序中推荐的xml解析方式,pull解析广泛的应用到了Android开发过程中,下面我们就看看pull解析的具体过程

首先我们将一个事先准备好的xml文件放入到我们的assets目录下,这将是我们案例中使用的实例文件
   
   
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="1">
<name>冰与火之歌</name>
<author>乔治马丁</author>
<year>2014</year>
<price>89</price>
</book>
<book id="2">
<name>安徒生动画</name>
<year>2014</year>
<price>77</price>
<language>English</language>
</book>
</bookstore>


然后我们根据要解析的文件来创建实体类Book.class
   
   
package com.xiaobei.bean;
 
public class Book {
 
private int id;
private String name;
private String author;
private String year;
private double price;
private String Language;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getLanguage() {
return Language;
}
public void setLanguage(String language) {
Language = language;
}
@Override
public String toString() {
return "Book [id=" + id + ", name=" + name + ", author=" + author
+ ", year=" + year + ", price=" + price + ", Language="
+ Language + "]";
}
}

下面我们开始真正的解析的过程

首先获取解析器的工厂
   
   
// 获取解析器工厂
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

通过工厂获取解析器的对象
   
   
// 获取解析器对象
XmlPullParser parser = factory.newPullParser();


设置解析器的数据并开始解析
   
   
// 设置要解析的数据
try {
InputStream ins = getResources().getAssets().open("books.xml");
 
parser.setInput(ins, "UTF-8");
 
// 获取解析事件的类型
int eventType = parser.getEventType();
 
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
//开始解析文件的时候调用此方法
case XmlPullParser.START_DOCUMENT:
Log.e("tag", "开始解析文件");
mList=new ArrayList<Book>();
break;
 
//解析到开始标签的时候调用这个方法
case XmlPullParser.START_TAG:
Log.e("tag", "开始解析标签");
String name=parser.getName();
if("book".equals(name)){
mBook=new Book();
mBook.setId(Integer.parseInt(parser.getAttributeValue(0)));
}
if(mBook!=null){
if("name".equals(name)){
mBook.setName(parser.nextText());
}
else if("author".equals(name)){
mBook.setAuthor(parser.nextText());
}
else if("year".equals(name)){
mBook.setYear(parser.nextText());
}
else if("price".equals(name)){
mBook.setPrice(Double.parseDouble(parser.nextText()));
}
else if("language".equals(name)){
mBook.setLanguage(parser.nextText());
}
}
break;
//解析到结束标签的时候调用这个方法
case XmlPullParser.END_TAG:
Log.e("tag", "结束解析标签");
if("book".equals(parser.getName())){
Log.i("tag", mBook.toString());
mList.add(mBook);
Log.i("tag", "数据添加成功!");
}
break;
 
//其他
default:
Log.e("tag", "default");
break;
}
//继续解析下一个,获取对应的解析类型
eventType=parser.next();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


通过以上的方式就可以解析到对应的xml中的数据并保存到对应的对象中去。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值