Pull解析xml,小实例

1 一个示例用的xml文件:person.xml

<?xml version="1.0" encoding="UTF-8"?>
<persons>
    <person id="111">
        <name>tom</name>
        <age>230</age>
    </person>
    <person id="222">
        <name>jerry</name>
        <age>233</age>
    </person>
</persons>

2 新建一个实体类:Person.java

package com.example.xml_saxparser;

public class Person {
    private Integer id;
    private String name;
    private Short age;
    public Person(){
    }
    public Person(Integer id, String name, Short age) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
    }
    public Person( String name, Short age) {
        super();
        this.name = name;
        this.age = age;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Short getAge() {
        return age;
    }
    public void setAge(Short age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
    }

}

3 解析的关键类:PullParser

package com.example.xml_pullparser;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.annotation.SuppressLint;
import android.util.Xml;
import com.example.xml_saxparser.Person;

public class PullPaser {

    @SuppressLint("UseValueOf")
    public static List<Person> getPerson(InputStream in) throws Exception{
        Person person = null;
        List<Person> persons = null;
        XmlPullParser pullParser = Xml.newPullParser();
        pullParser.setInput(in, "UTF-8");
        int event =  pullParser.getEventType();
        while(event != XmlPullParser.END_DOCUMENT){
            switch(event){
            case XmlPullParser.START_DOCUMENT:
                persons = new ArrayList<Person>();
                break;
            case XmlPullParser.START_TAG:
                if("person".equals(pullParser.getName())){
                    int id = new Integer(pullParser.getAttributeValue(0));
                    person = new Person();
                    person.setId(id);
                }
                if(person!= null){
                    if("name".equals(pullParser.getName())){
                        person.setName(pullParser.nextText());
                    }
                    if("age".equals(pullParser.getName())){
                        person.setAge(new Short(pullParser.nextText()));
                    }
                }
                break;
            case XmlPullParser.END_TAG:
                if("person".equals(pullParser.getName())){
                    persons.add(person);
                    person = null;
                }
                break;
            }
            event = pullParser.next();
        }
        return persons;
    }
}

4 单元测试Pull解析,看看效果吧。怎么单元测试,前面文章有说明。

package com.example.xml_pullparser;

import java.io.InputStream;
import java.util.List;

import android.test.AndroidTestCase;
import android.util.Log;

import com.example.xml_saxparser.MainActivity;
import com.example.xml_saxparser.Person;

public class PullJUnitTest extends AndroidTestCase {
    public void testPullgetPersons() throws Exception{
        InputStream in = MainActivity.class.getClassLoader().getResourceAsStream("person.xml");
        List<Person> persons = PullPaser.getPerson(in);
        in.close();
        for(Person p : persons){
            Log.i("Person", p.toString());
        }
    }

}

时间: 2024-11-13 06:45:21

Pull解析xml,小实例的相关文章

Android DOM、SAX、Pull解析XML(转)

本篇随笔将详细讲解如何在Android当中解析服务器端传过来的XML数据,这里将会介绍解析xml数据格式的三种方式,分别是DOM.SAX以及PULL. 一.DOM解析XML 我们首先来看看DOM(Document Object Model)这种方式解析xml,通过DOM解析xml在j2ee开发中非常的常见,它将整个xml看成是一个树状的结构,在解析的时候,会将整个xml文件加载到我们的内存当中,然后通过DOM提供的API来对我们的xml数据进行解析,这种方式解析xml非常的方便,并且我们可以通过

使用PULL解析XML文件

转载出处:http://blog.csdn.net/wangkuifeng0118/article/details/7313241 XmlPull和Sax类似,是基于流(stream)操作文件,然后根据节点事件回调开发者编写的处理程序.因为是基于流的处理,因此Xmlpull和 Sax都比较节约内存资源,不会象Dom那样要把所有节点以对橡树的形式展现在内存中. 但Xmlpull比Sax更简明,而且不需要扫描完整个流. 下面来看一个pull解析xml的例子: student.xml: 1 <?xml

PULL解析XML的运行机制详解

PULL解析简单易上手,基本上看一遍,基本上就会解析啦,但总是感觉对PULL解析的运行机制不是很了解,就总结了以下事件驱动到底是怎么执行的.. PULL: Android内置了PULL解析器.PULL解析器与SAX解析器类似,它提供了类似的事件,例如,开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发事件.每一种事件将作为数值代码被传送,因此使用一个switch来对感兴趣的事件进行处理. 这也是我最喜欢的方法,简单好用. 下面将对解析过程进行详细介绍,它到底是怎么运行

android学习二十一(使用Pull解析xml)

使用Pull解析xml 为了测试从网上得到的数据信息,我们需要配置一台服务器,我使用的是tomcat6.0,怎么配置tomcat我就不讲解了.配置好了以后在apache-tomcat-6.0.39\webapps\ROOT路径下面放置一个文件就可以通过浏览器来访问了 ,比如:放置了 一个hello.html文件,浏览器进行访问的路径是:http://localhost:8080/hello.html 现在在root目录下新建一个get_data.xml文件,内容如下: <apps> <a

android pull 解析xml方式

先获取到一个XmlPullParserFactory实例 通过实例得到XmlPullParser对象 调用XmlPullParser的setInput()方法将服务返回的XML数据设置进去开始解析 通过getEventType()可以得到当前的解析事件 While循环不断地进行解析 如果当前的解析事件不等于XmlPullParser.END_DOCUMENT,说明解析工作还没完成,调用next()方法后可以获取下一个解析事件. 在while循环中,我们通过getName()方法得到当前结点的名字

使用XML序列化器生成XML文件和利用pull解析XML文件

首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message> <sms> <body> 陈驰0 </body> <date> 1462162910995 </date> <address> 1380 </address> <type> 1 </type> &

SAX解析XML文件实例代码

import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.s

Android——PULL解析XML

简介 Android中常常使用XML文件保存用户的APP设置信息.因此需要对XML文件的相关操作进行了解.本文将以<学生信息管理系统>为案例背景进行介绍相关的XML解析的介绍,以及其他相关知识的阐述. 需求: 在一个Activity中可以动态添加一个学生信息并保存到XML文件. 同时,还可以查看当前的所有学生信息. 相关技术: 线性布局 设置onClick()事件响应函数 添加一个TextView以显示添加的学生信息 清空所有的子元素(列表中所有的学生信息的TextView) PULL创建XM

Android 学习之pull解析Xml

一. PUll解析Xml public static List<Person> xmlParser(InputStream xml) throws Exception { List<Person> persons=null; Person p=null; XmlPullParser parser=Xml.newPullParser(); parser.setInput(xml, "UTF-8"); int event=parser.getEventType();

XListview的下拉刷新、上拉加载、用Pull解析XML

做之前需要导入XListview的文件,此是用第三方的xListview实现的,东西没写全.此是在Fragment中实现的 //--------------XListView的布局---------------- <me.XListView android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:id="@+id/lv&