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中的数据并保存到对应的对象中去。