XML解析之pull解析

时间:2022-04-25 08:45:08
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;}@Overridepublic 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 blocke.printStackTrace();} } catch (XmlPullParserException e) {// TODO Auto-generated catch blocke.printStackTrace();}


通过以上的方式就可以解析到对应的xml中的数据并保存到对应的对象中去。