使用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 }
浙公网安备 33010602011771号