Android PULL解析XML

来源:互联网 发布:网络广告公司经营项目 编辑:程序博客网 时间:2024/05/09 02:55

                            PULL 解析XML

Ø      PULL解析器的运行方式和sax解析器很相似,它提供了类似的事件。

Ø      如开始元素和结束元素,使用parser.next()可以进行下一个元素并且触发相应的事件,事件将作为代码被发送,因此可以使用一个switch来对事件进行选择,然后进行相应的处理。当开始解析元素时候,调用parser.nextText()方法可以获得下一个Text类型的元素。

 

Ø      PULL特点:

Ø      简单的结构:一个接口,一个例外,一个工厂组成的PULL解析器

Ø      简单易用:PULL解析器只有一个重要的方法next方法,他被用来检索下一个事件,而它只有5个常用的属性:

Ø      START DOCUMENT

Ø      START_TAG

Ø      TEXT

Ø      END_TAG

Ø      END_DOCUMENT

步骤:

1.创建一个xml解析的工厂

XmlPullParserFactory factory =XmlPullParserFactory.newInstance();

2.获得xml解析类的引用

XmlPullParser parser =factory.newPullParser();

3.获得事件的类型

int eventType = parser.getEventType();

4.取出属性值

eventType != XmlPullParser.END_DOCUMENT

XmlPullParser.START_DOCUMENT:

5.获取该节点的内容

XmlPullParser.START_TAG

 

 

         public static List<Person> parseXML(InputStream inputStream, String encode) throwsException {                    List<Person>list = null;                   Personperson = null;// 装载解析每一个person节点的内容                   // 创建一个xml解析的工厂                   XmlPullParserFactoryfactory = XmlPullParserFactory.newInstance();                   // 获得xml解析类的引用                   XmlPullParserparser = factory.newPullParser();                    parser.setInput(inputStream,encode);                    // 获得事件的类型                   inteventType = parser.getEventType();                    while(eventType != XmlPullParser.END_DOCUMENT) {                            switch(eventType) {                            caseXmlPullParser.START_DOCUMENT:                                     list= new ArrayList<Person>();                                     break;                            case XmlPullParser.START_TAG:                                     if("person".equals(parser.getName())) {                                               person= new Person();                                               // 取出属性值                                               intid = Integer.parseInt(parser.getAttributeValue(0));                                               person.setId(id);                                     }else if ("name".equals(parser.getName())) {                                               Stringname = parser.nextText();// 获取该节点的内容                                               person.setName(name);                                     }else if ("age".equals(parser.getName())) {                                               intage = Integer.parseInt(parser.nextText());                                               person.setAge(age);                                     }                                     break;                           case XmlPullParser.END_TAG:                                     if("person".equals(parser.getName())) {                                               list.add(person);                                               person= null;                                     }                                     break;                            }                            eventType= parser.next();                   }                   return list;         }

 

原创粉丝点击