Android中Pull解析器解析xml文件案例

首先

准备一个供解析的xml文件,这里我们假定要解析的文件名称为person.xml,文件的具体内容为:

<?xml version="1.0" encoding="utf-8"?>
<persons>
    <person id="23">
        <name>liming</name>
        <age>23</age>
    </person>
</persons>

接下来写一个person的JavaBean:

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

}

然后

是业务类的编写:

package com.yangzi.service;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import android.util.Xml;
import com.yangzi.domain.Person;

public class PersonService {

    public static List<Person> getPersons(InputStream xml) throws Exception {
        List<Person> persons = null;
        Person person = null;
        //得到xmlpull解析器
        XmlPullParser pullParser = Xml.newPullParser();
        //設置解析器要解析的内容,和编码方式
        pullParser.setInput(xml,"utf-8");
        //循环读取xml文件的节点
        int event = pullParser.getEventType();//得到xml文件中的一个节点
        while(event != XmlPullParser.END_DOCUMENT){
            switch (event) {
            //xml文件开始节点,开始节点一般做数据的初始化
            case XmlPullParser.START_DOCUMENT:
                persons = new ArrayList<Person>();
                break;
            //若为开始节点
            case XmlPullParser.START_TAG:
                //若为person节点
                if("person".equals(pullParser.getName())){
                    //得到id
                    person = new Person();
                    //int id = Integer.parseInt(pullParser.getAttributeValue(0));
                    //int id = new Integer(pullParser.getAttributeValue(0));
                    int id = Integer.valueOf(pullParser.getAttributeValue(0));
                    person.setId(id);
                }
                //若为名字节点
                if("name".equals(pullParser.getName())){
                    String name = pullParser.nextText();
                    person.setName(name);
                }
                //若为年龄节点
                if("age".equals(pullParser.getName())){
                    //int age = Integer.parseInt(pullParser.nextText());
                    //int age = new Integer(pullParser.nextText());
                    int age = Integer.valueOf(pullParser.nextText());
                    person.setAge(age);
                }
                break;
            case XmlPullParser.END_TAG:
                if("person".equals(pullParser.getName())){
                    persons.add(person);
                    person = null;
                }
                break;
            }
            event = pullParser.next();//读取下一个节点
        }
        return persons;
    }
}

接下来

就可以写测试类对其进行测试了:

package com.yangzi.test;

import java.io.InputStream;
import java.util.List;
import android.test.AndroidTestCase;
import android.util.Log;
import com.yangzi.domain.Person;
import com.yangzi.service.PersonService;

public class PersonServiceTest extends AndroidTestCase {
    private static final String TAG = "PersonServiceTest";
    public void testPersons() throws Exception{
        InputStream in = this.getClass().getClassLoader().getResourceAsStream("person.xml");
        List<Person> persons = PersonService.getPersons(in);
        for(Person per:persons){
            Log.i(TAG, per.toString());
        }
    }
}

在测试之前

要在项目清单文件中引入测试环境:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
.....
<uses-library android:name="android.test.runner" /><!--注意放置的位置-->
....
</application>
....
<instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.yangzi.xml" /><!--注意放置的位置-->
</manifest>

ok,点击testPersons方法,运行为Android Junit Test试试吧!

体会

根据业务类PersonService 的分析代码,可以看出,在xml文件中的并没有进行操作,可以任意命名,也就是说,在解析xml文件时可以直接提取自己想要的就行了,其他的不用操作。

自己的想法,不知道对否,请大神指正啊!

时间: 2024-10-25 02:17:25

Android中Pull解析器解析xml文件案例的相关文章

无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.demo1" /> 上面targetPackage指定的包要和应用的package相同. (2)在清单文件中ap

Android下使用pull解析器生成XML文件、读取XML文件

Android下使用Pull解析器 1,Pull解析器的运行方式与SAX解析器相似.它提供了类似的事件,如:开始元素和结束元素事件. 2,使用parser.next()可以进入下一个元素并触发相应事件. 3,事件将作为一个int数值被发送,因此可以使用一个switch对相应的事件进行处理. 4,当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值. 5,相关API: 获得当前节点事件类型:parser.getEventType(); 获得下一节点事件类型

使用Pull解析器生成XML文件和读取xml文件

有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器. 一.布局界面 [html] view plaincopyprint? <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

使用Pull解析器生成XML文件

有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器. 1.使用Pull解析器生成一个与itcast.xml文件内容相同的myitcast.xml文件,代码在下方 public static String writeXML(List<Person> persons, Writer wri

Android开发系列(八):采用Pull解析器解析和生成XML内容

因为有些时候,应用的数据是采用XML文件的格式存放的,所以我们需要知道怎么从XML文件中读取这些数据 在Android中可以通过SAX.DOM.pull解析XML文件. 在本篇博文中主要介绍采用Pull解析器解析和生成XML内容. 介绍:在Android已经集成了Pull解析器,所以无需添加任何的jar文件.在Android中本身用到的各种xml文件,其内部也是采用Pull解析器进行解析的. 一.采用Pull解析器解析XML文件内容 首先,我们需要先建立一个Android Project项目,名

使用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> &

Android中解析与创建XML文件

Android中解析与创建XML文件 在Android中对XML的操作有多种方式,常见的有三种方式:SAX.DOM和PULL方式. DOM方式会把整个XML文件加载到内存中,在PC上常使用DOM的方式. 但是在性能敏感的设备上,主要采用的是SAX的方式,但是缺点是嵌套多个分支的时候处理不是很方便. 而PULL的方式类似SAX方式,同样很节省内存. 因此,本文章中只提供PULL的方式解析与创建XML文件. 基础类 本例中使用的实体类的定义如下: public class CAddress impl

android基础知识13:AndroidManifest.xml文件解析

1.重要性 AndroidManifest.xml是Android应用程序中最重要的文件之一.它是Android程序的全局配置文件,是每个 android程序中必须的文件.它位于我们开发的应用程序的根目录下,描述了package中的全局数据,包括package中暴露的组件 (activities, services, 等等),以及他们各自的实现类,各种能被处理的数据和启动位置等重要信息. 因此,该文件提供了Android系统所需要的关于该应用程序的必要信息,即在该应用程序的任何代码运行之前系统所

使用DOM解析器解析XML文件 学习笔记

dom解析和dom4j原理一致 Node是所有元素的父接口 常用的API: DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();取得DOM解析器工厂 DocumentBuilder domParser = factory.newDocumentBuilder();取得DOM解析器 domParser.parse(*.xml)加载需要解析的XML文件 Document.getDocumentElement()取

【Java编程】SAX XML Parser解析、生成XML文件

1.优缺点 优点: SAX 从根本上解决了 DOM 在解析 XML 文档时产生的占用大量资源的问题.其实现是通过类似于流解析的技术,通读整个 XML 文档树,通过事件处理器来响应程序员对于 XML 数据解析的需求.由于其不需要将整个 XML 文档读入内存当中,它对系统资源的节省是十分显而易见的,它在一些需要处理大型 XML 文档以及性能要求较高的场合有起了十分重要的作用.支持 XPath 查询的 SAX 使得开发人员更加灵活,处理起 XML 来更加的得心应手. 缺点: 但是同时,其仍然有一些不足