Pull解析和Sax解析很相似,都是轻量级的解析,在Android的内核中已经嵌入了Pull,所以我们不需要再添加第三方jar包来支持Pull。Pull解析和Sax解析不一样的地方有(1)pull读取xml文件后触发相应的事件调用方法返回的是数字(2)pull可以在程序中控制想解析到哪里就可以停止解析。下面看我自己做的demo,来跟大家讲解下:

xml代码:

person.xml

<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="20">
<name>zhangqian</name>
<age>20</age>
</person>
<person id="23">
<name>zhangmeili</name>
<age>23</age>
</person>
</persons>
<?xml version="1.0" encoding="UTF-8"?>  这是xml头文件 也叫做start document
<persons>这是xml节点(element)  xml节点有两种类型(Node Type)1,element 2,text(就是上个element和下一个element之间称作文本类型)

通过对XML文件的大致特征,我们首先要建立一个javabean,建在一个domian包下,代码如下
package com.example.domian;

public class Person {

    private Integer id;
private String name;
private Integer 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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
public Person(Integer id, String name, Integer age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public Person(){} }

下面我们要开始处理业务层,对xml文件进行解析了,建在service包下,代码如下

package com.example.service;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; import org.xmlpull.v1.XmlPullParser; import android.util.Xml; import com.example.domian.Person; public class PersonService {
public static List<Person> getPerson(InputStream xml) throws Exception {
List<Person> persons =null;
Person person = null;
XmlPullParser pullParse = Xml.newPullParser();
pullParse.setInput(xml,"UTF-8");
int event = pullParse.getEventType();
while(event!=XmlPullParser.END_DOCUMENT){
switch (event) {
case XmlPullParser.START_DOCUMENT:
persons = new ArrayList<Person>();
break; case XmlPullParser.START_TAG :
if("person".equals(pullParse.getName())){
int id =new Integer(pullParse.getAttributeValue(0));
person = new Person();
person.setId(id);
}
if("name".equals(pullParse.getName())){
String name = pullParse.nextText();
person.setName(name);
}
if("age".equals(pullParse.getName())){
int age = new Integer(pullParse.nextText());
person.setAge(age);
} break; case XmlPullParser.END_TAG :
if("person".equals(pullParse.getName())){
persons.add(person);
person = null;
} break;
}
event = pullParse.next(); }
return persons;
}
}

下面我们要对解析的方法是否正确,进行测试,写一个测试类,建立一个test包,代买如下

package com.example.test;

import java.io.InputStream;
import java.util.List; import com.example.domian.Person;
import com.example.service.PersonService; import android.test.AndroidTestCase;
import android.util.Log; public class TestPersonService extends AndroidTestCase {
private static final String TAG = "TestPersonService";
public void testPerson() throws Exception{
InputStream xml = this.getClass().getClassLoader().getResourceAsStream("person.xml");
List<Person> persons = PersonService.getPerson(xml);
for(Person person:persons){
Log.i(TAG, person.toString());
}
} }

要使用android的单元测试,需要在AndroidManifest.xml文件中加入声明,AndroidManifest.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.xml"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="17" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.xml.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<uses-library android:name="android.test.runner"/> //主要配置这条
</application>
<instrumentation android:name="android.test.InstrumentationTestRunner" android:label="Tests for My APP" android:targetPackage="com.example.xml"></instrumentation>
//主要配置这条
</manifest>

看JUnit 是否正确,绿色代表成功,红色代表失败

如图所示 成功!

看logcat日志,看运行结果!如图

很高兴和大家分享,如有什么问题及时和我交流,我会尽快回复。版权所有,如转载请注明出处http://www.cnblogs.com/jianrong-zheng/p/3548053.html谢谢!




android之xmlpullparse解析器的更多相关文章

  1. Android -------- 用XmlPullParser解析器解析XML文件

  2. 黎活明8天快速掌握android视频教程--15_采用Pull解析器解析和生成XML内容

    1.该项目主要有下面的两个作用 (1)将xml文件解析成对象的List对象,xml文件可以来自手机本地,也可以来自服务器返回的xml数据 (2)强list对象保存成xml文件,xml保存到手机的内存卡 ...

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

    1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...

  4. android XML解析器全解案例

    1.使用pull解析 package com.example.myxml; import java.io.InputStream; import java.util.ArrayList; import ...

  5. Android(java)学习笔记187:Android中操作XML数据(使用Pull解析器)

    1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...

  6. Android XML解析器的问题

    最近在项目中遇到了一个解析XML的问题,我们是用android自带的DOM解析器来解析XML的,但发现了一个android的问题,那就是在2.3的SDK上面,无法解析像<, >, 等字符串 ...

  7. Android Multimedia框架总结(八)Stagefright框架之AwesomePlayer及数据解析器

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼:http://blog.csdn.net/hejjunlin/article/details/52503057 前言:前面一篇分析了medi ...

  8. Android开发8——利用pull解析器读写XML文件

    一.基本介绍 对XML解析有SAX和DOM等多种方式,Android中极力推荐xmlpull方式解析xml.xmlpull不仅可用在Android上同样也适用于javase,但在javase环境中需自 ...

  9. Android解析XML之SAX解析器

    SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的.当事件源产生事件后,调用事件处理器相应的处理方法,一个事件 ...

随机推荐

  1. 前端开发week3

    开发工具学习ing... lesscss 框架 lesscss是一种动态样式语言,属于css预处理语言的一种,它使用类似css的语法,为css的赋予了动态语言的特性,如变量.继承.运算.函数等,更方便 ...

  2. Linux学习 :Uboot, Kernel, 根文件系统初步分析

    1.U-Boot启动内核的过程可以分为两个阶段: 1)第一阶段的功能 硬件设备初始化 加载U-Boot第二阶段代码到RAM空间 设置好栈 跳转到第二阶段代码入口 2)第二阶段的功能 初始化本阶段使用的 ...

  3. iOS开发技巧-2

    1,打印View所有子视图 po [[self view]recursiveDescription] 2,layoutSubviews调用的调用时机 * 当视图第一次显示的时候会被调用 * 当这个视图 ...

  4. VS调试时下不到断点的处理方式。

    调试无法命中断点的情况我想很多人遇到过,反正我是遇到过很多次了,有时候是没有生成项目或解决方案,有时候是调试版本不一致. 当然还有其他的情况都已经忘记如何处理的了. 今天在release模式下要调试代 ...

  5. AJAX进行数据交互的过程

    AJAX全称为"Asynchronous JavaScript and XML"(异步JavaScript和XML). 是指一种创建交互式网页应用的网页开发技术. 通过在后台与服务 ...

  6. [网络技术][转]网卡的offload概念

    网络数据包分析 网卡Offload 对于网络安全来说,网络传输数据包的捕获和分析是个基础工作,绿盟科技研究员在日常工作中,经常会捕获到一些大小远大于MTU值的数据包,经过分析这些大包的特性,发现和网卡 ...

  7. AudioUnit 用法

    1.描述音频单元 AudioComponentDescription desc; desc.componentType = kAudioUnitType_Output; desc.componentS ...

  8. 将excel文件批量转成pdf

    防止数据编辑.改动带来的不一致性,常常要将excel文件转成pdf文件再共享.发送给对方.有时excel文件还挺多,手头上保存实在是太慢了.就考虑用VBA批量转置. 掌握几个东西,就比较容易了: 1. ...

  9. Selenium+Python的环境配置

    因为项目的原因,最近较多的使用了UFT来进行自动化测试工作,半年没有使用Selenium了,于是在自己的电脑上重新配置了基于python3.x的selenium环境,配置过程大致如下: 1. Sele ...

  10. opencv+vs2010

    当程序的输出是系统而不是vs2010时 可以使用Ctrl+F5运行 或者使用命令行模式     打开cmd.exe窗口 输入自己工程(项目)所在的盘,比如我放在E盘的,我就输入E:,按回车 输入cd, ...