PULL解析XML

来源:互联网 发布:淘宝上架宝贝教程 手机 编辑:程序博客网 时间:2024/06/17 03:51
一、书上内容
PULL解析XML的方式与SAX解析XML的方式一样,它也是基于事件驱动的。使用PULL解析器解析XML文件时应注意以下几点:
(1)通过Xml.newPullParser()获得解析器。
(2)通过pullParser.setInput(inputStream, "utf-8")设置输入流以及编码。
(3)通过pullParser.next()获取下一元素并触发相应事件。


XMLPullParser中定义了常量来标识各种解析事件。
(1)
常量:START_DOCUMENT
常量所标识的解析事件:读取到XML的声明返回
(2)
常量:END_DOCUMENT
常量所标识的解析事件:读取到XML的结束返回
(3)
常量:START_TAG
常量所标识的解析事件:读取到XML的开始标签返回
(4)
常量:END_TAG
常量所标识的解析事件:读取到XML的结束标签返回
(5)
常量:TEXT
常量所标识的解析事件:读取到XML的文本返回




二、自己项目
1、解析步骤
XmlPullParser pullParser=Xml.newPullParser();pullParser.setInput(inputStream, "utf-8");int event=pullParser.getEventType();while(event!=XmlPullParser.END_DOCUMENT){switch(event){case XmlPullParser.START_DOCUMENT:break;case XmlPullParser.START_TAG:break;case XmlPullParser.TEXT:break;case XmlPullParser.END_TAG:break;case XmlPullParser.END_DOCUMENT:break;}event=pullParser.next();}



2、项目代码
//MainActivity.java
InputStream inputStream=MainActivity.class.getClassLoader().getResourceAsStream("Persons.xml");ArrayList<Person> persons=MyPullParser.getList(inputStream);for(int i=0;i<persons.size();i++){Person person=persons.get(i);tv_parse.append("\nid="+person.getId()+";age="+person.getAge()+";name="+person.getName());}



//MyPullParser.java
public class MyPullParser {static Person person;static ArrayList<Person> persons;static String element;static final String TAG="myPull";public static ArrayList<Person>getList(InputStream inputStream) {XmlPullParser pullParser=Xml.newPullParser();try {pullParser.setInput(inputStream, "utf-8");int event=pullParser.getEventType();while(event!=XmlPullParser.END_DOCUMENT){switch(event){case XmlPullParser.START_DOCUMENT:persons=new ArrayList<Person>();Log.i(TAG,"now begin to parse document");break; case XmlPullParser.START_TAG:element=pullParser.getName();if(element.equals("Person")){person=new Person();String id=pullParser.getAttributeValue(0);person.setId(id);}Log.i(TAG, "now begin to parse the element value:"+element);break;case XmlPullParser.TEXT:String s=pullParser.getText().trim();if(!s.equals("")){if(element.equals("name")){person .setName(s);}else if(element.equals("age")){person .setAge(s);}Log.i(TAG, "now parse the element value:"+s);}break;case XmlPullParser.END_TAG:element=pullParser.getName();if(element.equals("Person")){persons.add(person);person=null;}Log.i(TAG, "now end the element value:"+element);break;case XmlPullParser.END_DOCUMENT:Log.i(TAG,"now end the document");break;}event=pullParser.next();}} catch (XmlPullParserException e) {e.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return persons;}}






//Person.java
public class Person {String id;String name;String age;public Person() {super();id="0";name="王二";age="50";}public Person(String id, String name, String age) {super();this.id = id;this.name = name;this.age = age;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}}






//Persons.xml

<Persons>    <Person id="1">        <name>张三</name>        <age>20</age>    </Person>    <Person id="2">        <name>李四</name>        <age>30</age>    </Person>    <Person id="3">        <name>王五</name>        <age>30</age>    </Person></Persons>


原创粉丝点击