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 } 

 

你可能感兴趣的:(android)