android pull解析相關理解

Pull解析XML 
XmlPullParser解析器的運行方式與SAX解析器相似.它提供了類似的事件(開始元素和結束元素),但需要使用parser.next()方法來提取它們.事件將作爲數值代碼被髮送,因此可以根據不同的事件代碼值來進行不同的處理.通過parser.getEventType()方法來取得事件的代碼值(如XmlPullParser.START_DOCUMENT、XmlPullParser.START_TAG、XmlPullParser.END_TAG). 
當處於某個元素時可以調用XmlPullParser的getAttributte()方法來獲取屬性的值,也可調用它的nextText()獲取本節點的值。 
具體思路: 
*構建PullXmlParser解析器 
XmlPullParser parser = Xml.newPullParser(); 
*將xml文檔註冊到解析器中 
parser.setInput(); 
*觸發事件,獲得事件類型碼 
int event = parser.getEventType(); 
*針對事件進行具體分析 
"name".equals(parser.getName());//判斷開始標籤元素是否是name 
parser.getAttributeValue(0);//得到標籤的屬性值 
parser.nextText();//獲取下一個Text節點的值 
*觸發並進入下一個事件 
event = parser.next(); 
Pull解析和Sax解析不一樣的地方有: 
(1)pull讀取xml文件後觸發相應的事件調用方法返回的是數字 
(2)pull可以在程序中控制想解析到哪裏就可以停止解析。 
優點:不是一次加載,中途可以停止 

***********pull解析的代碼*************

複製代碼
 1 public class PullparserActivity extends Activity { 
 2 private TextView mtextview; 
 3 private ListView mlistview; 
 4 
 5 @Override 
 6 protected void onCreate(Bundle savedInstanceState) { 
 7 
 8 super.onCreate(savedInstanceState); 
 9 setContentView(R.layout.domparser); 
10 mtextview = (TextView) findViewById(R.id.textView1); 
11 mlistview = (ListView) findViewById(R.id.listView1); 
12 mtextview.setText("pull解析xml"); 
13 
14 List<Student> list = parser(); 
15 ArrayAdapter<Student> adapter = new ArrayAdapter<Student>(this, 
16 android.R.layout.simple_list_item_1, list); 
17 mlistview.setAdapter(adapter); 
18 
19 } 
20 
21 private List<Student> parser() { 
22 List<Student> list = new ArrayList<Student>(); 
23 // 獲取pull解析器 
24 XmlPullParser parser = Xml.newPullParser(); 
25 try { 
26 // 加載xml文檔 
27 parser.setInput(PullparserActivity.this.getClassLoader() 
28 .getResourceAsStream("student.xml"), "utf-8"); 
29 // c.觸發事件,獲得事件類型碼 
30 int event = parser.getEventType(); 
31 Student student = null; 
32 
33 while (event != XmlPullParser.END_DOCUMENT) { 
34 switch (event) { 
35 case XmlPullParser.START_DOCUMENT:// 文檔開始 
36 break; 
37 case XmlPullParser.START_TAG:// 開始標籤 
38 if ("student".equals(parser.getName())) { 
39 student = new Student(); 
40 student.setId(Integer.valueOf(parser 
41 .getAttributeValue(0))); 
42 
43 } 
44 Log.i("TAG", "infor"); 
45 if (student != null) { 
46 if ("name".equals(parser.getName())) { 
47 student.setName(parser.nextText()); 
48 } else if ("age".equals(parser.getName())) { 
49 student.setAge(Integer.valueOf(parser 
50 .getAttributeValue(0))); 
51 } 
52 } 
53 break; 
54 case XmlPullParser.END_TAG://結束標籤 
55 if ("student".equals(parser.getName())) { 
56 list.add(student); 
57 student = null; 
58 } 
59 Log.i("TAG", "infor"); 
60 break; 
61 case XmlPullParser.TEXT:// 文本解析 
62 break; 
63 } 
64 event = parser.next(); 
65 
66 } 
67 } catch (Exception e) { 
68 e.printStackTrace(); 
69 } 
70 
71 return list; 
72 } 
73 } 
複製代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章