您的位置:首页 > 移动开发 > Android开发

xml解析--Pull方式

2015-09-26 00:08 513 查看
[align=left]xml数据解析[/align]
[align=left]Pull解析方式[/align]
    Pull是Android内置的xml解析器(在Android项目中使用Pull解析不需要导入jar包),Android内部的xml文件的解析都使用了Pull解析器。Pull解析器的运行方式与SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。

得到一个XmlPullParser对象这里得到XMLPullParser对象的方式有两种:
       1)通过Xml这个工具类的.newPullParser()方式得到(在Android工程中可以使用)
       2)通过XmlPullParserFactory工厂创建

读取到xml的声明返回数字0 START_DOCUMENT;
读取到xml的结束返回数字1 END_DOCUMENT ;

读取到xml的开始标签返回数字2 START_TAG

读取到xml的结束标签返回数字3 END_TAG
读取到xml的文本返回数字4 TEXT
test.xml文件
<?xml
version="1.0"
encoding=
"UTF-8"?>
<persons>
 
   
<person
id="23">
 
       
<name>
liming</name

       
<age>
30</
age> 
   
</person

   
<person
id="20">
 
       
<name>
lixiangmei</name

       
<age>
25</
age> 
   
</person

[align=left]</persons>[/align]
[align=left]解析的java文件(创建的是java工程,所以需要导入xml2-2.3.0.jar,xmlpull_1_1_3_4c.jar,实体类Person省略,其中有id,name,age三个属性,只有setter和getter方法)[/align]
package com.hngd.xmldemo;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.ObjectInputStream.GetField;

import java.io.OutputStream;

import java.io.StringReader;

import java.util.ArrayList;

import java.util.List;

import org.xmlpull.v1.XmlPullParser;

import org.xmlpull.v1.XmlPullParserException;

import org.xmlpull.v1.XmlPullParserFactory;

public class XmlDemo {

     public static void main(String[] args) {

          XmlDemo xml = new XmlDemo();

          FileInputStream in;

          try {

               in = new FileInputStream(new File("D:\\eclipseWorkSpace\\JsonDemo\\src\\com\\hngd\\xmldemo\\test2.xml"));

               List<Person> list = xml.parseXml(in);

               System.out.println(list.get(0));

               System.out.println(list.get(1));

          } catch (FileNotFoundException e) {

               e.printStackTrace();

          }

     }

    

     private List<Person> parseXml(InputStream in){

          List<Person> list = null;

          Person person = null;

          try {

               XmlPullParserFactory factory = XmlPullParserFactory.newInstance();//获取Pull解析工厂

               XmlPullParser xmlPullparser = factory.newPullParser();//获取XmlPullParser的实例

               //XmlPullParser xmlPullparser = Xml.newPullParser();  //安卓工程中使用Xml工具获取Pull解析器

               xmlPullparser.setInput(in,"UTF-8");  // 设置需要解析的XML数据

               int eventType = xmlPullparser.getEventType();

               while(eventType != XmlPullParser.END_DOCUMENT){   //不是文档的结尾

                    switch (eventType) {

                    case XmlPullParser.START_DOCUMENT:  //1、文档开始。如果为开始解析头标签START_DOCUMENT,初始化数据

                         list = new ArrayList<Person>();

                         break;

                    case XmlPullParser.START_TAG:      //2、标签开始。如果为开始解析属性START_TAG,则获取数据

                         String name = xmlPullparser.getName(); //当前指向元素的名称(节点名称)

                         if("person".equals(name)){

                              person = new Person();

                              person.setId(Integer.parseInt(xmlPullparser.getAttributeValue(0)));

                         }

                        

                         if(person!=null){

                              if("name".equals(name)){

                                   person.setName(xmlPullparser.nextText());

                              }

                              if("age".equals(name)){

                                   person.setAge(Integer.parseInt(xmlPullparser.nextText()));

                              }

                         }

                         break;

                    case XmlPullParser.END_TAG:     //3、标签结束。当触发xml文档结束事件的名称为person(即解析结束位置),将封装对象放入集合,再将对象制空

                         if("person".equals(xmlPullparser.getName())){

                              list.add(person);

                              person = null;

                         }

                         break;

                   

                    }

                    eventType = xmlPullparser.next();

               }

          } catch (XmlPullParserException e) {

               e.printStackTrace();

          } catch (IOException e) {

               e.printStackTrace();

          }

          return list;

         

     }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息