使用pull解析xml文件的基本流程关键字——XmlPullParser

1.用pull解析asset中的xml文件

<?xml version="1.0" encoding="utf-8"?>
<books>
    <book>
        <id>1001</id>
        <name>Thinking In Java</name>
        <price>80.00</price>
    </book>
    <book>
        <id>1002</id>
        <name>Core Java</name>
        <price>90.00</price>
    </book>
    <book>
        <id>1003</id>
        <name>Hello, Andriod</name>
        <price>100.00</price>
    </book>
</books>

 

 1 package com.bwf.pull_1;
 2 
 3 import java.io.InputStream;
 4 import java.util.ArrayList;
 5 import java.util.List;
 6 
 7 import org.xmlpull.v1.XmlPullParser;
 8 import org.xmlpull.v1.XmlPullParserException;
 9 
10 import android.util.Log;
11 import android.util.Xml;
12 /**
13  * 使用pull解析xml文件的基本流程:
14  *         1. 获取解析器对象XmlPullParser对象parser
15  *         2. 可以给parser对象设置输入的编码方式
16  *         3. 循环驱动事件进行解析
17  *             事件分为4类:
18  *                 a. 开始文档:XmlPullParser.START_DOCUMENT值为0
19  *                 b. 结束文档:XmlPullParser.END_DOCUMENT值为1
20  *                 c. 开始标签:XmlPullParser.START_TAG值为2
21  *                 d. 结束标签:XmlPullParser.END_TAG值为3
22  *             一个事件处理完毕之后,需要提供parser的next方法去驱动下一个事件
23  * 
24  * */
25 public class PullParser {
26     /**
27      * 从指定资源中解析出Book对象存入List里
28      * */
29     public static List<Book> parseBook(InputStream in){
30         List<Book> books = null;
31         Book book = null;
32         // 解析过程如下
33         // 获取解析器对象
34         XmlPullParser parser = Xml.newPullParser();

             这是获取XmlPullParser文件的另一种方式
// XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
// XmlPullParser parser = factory.newPullParser();

35         try {
36             // 设置输出的编码方式
37             parser.setInput(in, "UTF-8");
38             // 得到解析事件
39             int event = parser.getEventType();
40             // 循环进行解析,跳出循环的条件解析到文档结束事件
41             while(event != XmlPullParser.END_DOCUMENT){
42                 switch (event) {
43                 // 开始文档时,创建容器
44                 case XmlPullParser.START_DOCUMENT:
45                     books = new ArrayList<Book>();
46                     break;
47                 // 开始标签事件的处理
48                 case XmlPullParser.START_TAG:
49                     // 遇到book开始标签时创建Book对象用来封装其相关属性
50                     if("book".equals(parser.getName())){
51                         book = new Book();
52                     // 遇到id将其取出放入Book对象
53                     } else if("id".equals(parser.getName())){
54                         event = parser.next();
55                         String id = parser.getText();
56                         book.setId(id);
57                     // 遇到name将其取出封装到Book对象中
58                     } else if("name".equals(parser.getName())){
59                         event = parser.next();
60                         String name = parser.getText();
61                         book.setName(name);
62                     // 遇到price标签事件时将其取出封装到Book对象
63                     } else if("price".equals(parser.getName())){
64                         event = parser.next();
65                         String price = parser.getText();
66                         book.setPrice(price);
67                     }
68                     break;
69                 // 结束标签中,我们只需要关注book标签
70                 case XmlPullParser.END_TAG:
71                     // 判断结束的book标签,把Book对象添加到books里
72                     if("book".equals(parser.getName())){
73                         books.add(book);
74                         book = null;
75                     }
76                     break;
77 
78                 default:
79                     break;
80                 }
81                 
82                 event = parser.next();
83             }
84         } catch (Exception e) {
85             // TODO Auto-generated catch block
86             Log.d("fanhy", e.toString());
87         }
88         
89         return books;
90     }
91 }

2.

 1 package com.bwf.pull_1;
 2 
 3 public class Book {
 4     private String id;
 5     private String name;
 6     private String price;
 7     public String getId() {
 8         return id;
 9     }
10     public void setId(String id) {
11         this.id = id;
12     }
13     public String getName() {
14         return name;
15     }
16     public void setName(String name) {
17         this.name = name;
18     }
19     public String getPrice() {
20         return price;
21     }
22     public void setPrice(String price) {
23         this.price = price;
24     }
25     @Override
26     public String toString() {
27         return "[id:"+id+",name:"+name+",price:"+price+"]";
28     }
29     
30     
31 }

3.

 1 package com.bwf.pull_1;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.util.List;
 6 
 7 import android.os.Bundle;
 8 import android.app.Activity;
 9 import android.util.Log;
10 import android.view.Menu;
11 import android.view.MenuItem;
12 import android.widget.TextView;
13 
14 public class MainActivity extends Activity {
15     TextView tv;
16     @Override
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_main);
20         
21         tv = (TextView) findViewById(R.id.tv);
22     }
23 
24     @Override
25     public boolean onCreateOptionsMenu(Menu menu) {
26         // Inflate the menu; this adds items to the action bar if it is present.
27         getMenuInflater().inflate(R.menu.main, menu);
28         return true;
29     }
30 
31     @Override
32     public boolean onOptionsItemSelected(MenuItem item) {
33         switch (item.getItemId()) {
34         case R.id.action_settings:
35             try {
36                 InputStream in = getAssets().open("books.xml");
37                 List<Book> books = PullParser.parseBook(in);
38                 for (Book book : books) {
39                     tv.append(book.toString() + "\n\n");
40                 }
41             } catch (IOException e) {
42                 Log.d("fanhy", "main:异常:"+e.toString());
43             }
44             break;
45 
46         default:
47             break;
48         }
49         return super.onOptionsItemSelected(item);
50     }
51 }

 

posted on 2015-10-20 18:32  敬的男人  阅读(329)  评论(0)    收藏  举报