Android-->XmlPullParser

 1 package com.maitewang.internetdemo.demo;
 2 
 3 import java.io.InputStream;
 4 import java.util.ArrayList;
 5 import java.util.List;
 6 import org.xmlpull.v1.XmlPullParser;
 7 import org.xmlpull.v1.XmlPullParserFactory;
 8 
 9 import android.util.Xml;
10 
11 public class XmlDemo {
12     public static List<Person> getPerson(InputStream is) throws Exception {
13         Person person = null;
14         List<Person> persons = null;
15         // 两种方法获取对象,其实哪种都一样..
16         // 第一种
17         XmlPullParser pullParser = Xml.newPullParser();
18         // 第二种 生成工厂 然后工厂获取.
19         XmlPullParserFactory xppf = XmlPullParserFactory.newInstance();
20         XmlPullParser pullParser1 = xppf.newPullParser();
21         // 几种事件类型
22         // XmlPullParser.START_DOCUMENT(开始解析)
23         // XmlPUllParser.START_TAG(开始元素)
24         // XmlPullParser.TEXT(解析文本):
25         // XmlPullParser.END_TAG(结束元素);
26         // XmlPullParser.END_DOCUMENT(结束解析) 事件结束 每一种都与之对应.
27         // 解析中 元素又有属性.属性该怎么解析? 取出元素 文本.
28 
29         // 2:设置要解析的流,编码
30         pullParser.setInput(is, "UTF-8");
31         // 3:获取编码事件
32         int event = pullParser.getEventType();
33         // 4:中间开始判断事件
34         while (event != XmlPullParser.END_DOCUMENT) {
35             switch (event) {
36             case XmlPullParser.START_DOCUMENT:
37                 // 判断是否文档开头.
38                 // 一般这个时候开始创建对象准备分解文档
39                 persons = new ArrayList<Person>();
40                 break;
41             case XmlPullParser.START_TAG:
42                 // 开始进入元素了
43                 // pullParser.getName();获取元素名字 也就是<person></person> 这个
44                 if ("person".equals(pullParser.getName())) {
45 
46                     // 取出属性元素id为0的值,方法:pullParser.getAttributeValue(int index);
47                     int id = new Integer(pullParser.getAttributeValue(0));
48                     person = new Person();
49                     person.setId(id);
50                 }
51                 if (person == null) {
52                     if ("name".equals(pullParser.getName())) {
53                         // 方法名称也出来了.pullParser.nextText();获取元素值
54                         person.setName(pullParser.nextText());
55                     }
56                     if ("age".equals(pullParser.getName())) {
57                         person.setAge(pullParser.nextText());
58                     }
59                 }
60             case XmlPullParser.END_TAG:
61                 if ("person".equals(pullParser.getName())) {
62                     persons.add(person);
63                     person = null;
64                 }
65                 break;
66             }
67             // 方法名称也出来了,next开始读取下一条元素.
68             event = pullParser.next();
69 
70         }
71 
72         return persons;
73 
74     }
75 }
XmlPullParser

 1:实例华XmlPullParser对象,2种方式:

  1.1:Xml.newPullParser();

  1.2: 获取工厂,然后从工厂里面生产

    XmlPullParserFactory xppf = XmlPullParserFactory.newInstance();   

    XmlPullParser xpp = xppf.newPullParser();

 2:因为pull解析是根据事件来的,所以需要判断事件。

    // 几种事件类型
    // XmlPullParser.START_DOCUMENT(开始解析)
    // XmlPUllParser.START_TAG(开始元素)
    // XmlPullParser.TEXT(解析文本):
    // XmlPullParser.END_TAG(结束元素);
    // XmlPullParser.END_DOCUMENT(结束解析) 事件结束 每一种都与之对应.
 3:Method:

    pullParser.getName();获取元素名字

    取出属性元素id为0的值,方法:pullParser.getAttributeValue(int index);  AttriBute 元素,根据这一系列操作。

    pullParser.nextText(); 获取元素内容。

    pullParser.next();读取下一条元素。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。