在Android中极力推荐的xmlpull方式解析xml。

为什么 STAX 解析方式 效率 好于 SAX ?

1、SAX 无选择性的,所有事件都会处理 解析方式,Stax 由用户控制需要处理事件类型

2、在使用Stax进行数据解析时,随时终止解析

环境:

xmlpull_1_1_3_4c.jar

http://www.xmlpull.org/    xmlpull

XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<student id="1" group="1">
<name>张三</name>
<sex>男</sex>
<age>18</age>
<email>zhangsan@163.com</email>
<birthday>1987-06-08</birthday>
<memo>好学生</memo>
</student>
<student id="2" group="2">
<name>李四</name>
<sex>女</sex>
<age>18</age>
<email>lisi@163.com</email>
<birthday>1987-06-08</birthday>
<memo>好学生</memo>
</student>
<student id="3" group="3">
<name>小王</name>
<sex>男</sex>
<age>18</age>
<email>xiaowang@163.com</email>
<birthday>1987-06-08</birthday>
<memo>好学生</memo>
</student>
<student id="4" group="4">
<name>小张</name>
<sex>男</sex>
<age>18</age>
<email>xiaozhang@163.com</email>
<birthday>1987-06-08</birthday>
<memo>好学生</memo>
</student>
<student id="5" group="5">
<name>小明</name>
<sex>男</sex>
<age>18</age>
<email>xiaoming@163.com</email>
<birthday>1987-06-08</birthday>
<memo>好学生</memo>
</student>
</root>

XML对应的实体文件:

public class Student {

    private int id;
private int group;
private String name;
private String sex;
private int age;
private String email;
private String memo;
private String birthday;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getGroup() {
return group;
}
public void setGroup(int group) {
this.group = group;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
} }

Pull解析代码

public class PullParseXml {

    public List<Student> PullParseXML(){

        List<Student> list=null;
Student student = null; //构建XmlPullParserFactory
try {
XmlPullParserFactory pullParserFactory=XmlPullParserFactory.newInstance();
//获取XmlPullParser的实例
XmlPullParser xmlPullParser=pullParserFactory.newPullParser();
//设置输入流 xml文件
xmlPullParser.setInput(Thread.currentThread().getContextClassLoader().getResourceAsStream("Student.xml"), "UTF-8"); //开始
int eventType=xmlPullParser.getEventType(); try {
while(eventType!=XmlPullParser.END_DOCUMENT){
String nodeName=xmlPullParser.getName();
switch (eventType) {
//文档开始
case XmlPullParser.START_DOCUMENT:
list=new ArrayList<Student>();
break;
//开始节点
case XmlPullParser.START_TAG:
//判断如果其实节点为student
if("student".equals(nodeName)){
//实例化student对象
student=new Student();
//设置Id属性
student.setId(Integer.parseInt(xmlPullParser.getAttributeValue(0)));
//设置Group属性
student.setGroup(Integer.parseInt(xmlPullParser.getAttributeValue(1)));
}else if("name".equals(nodeName)){
//设置name
student.setName(xmlPullParser.nextText());
}else if("sex".equals(nodeName)){
//设置sex
student.setSex(xmlPullParser.nextText());
}else if("age".equals(nodeName)){
//设置age
student.setAge(Integer.parseInt(xmlPullParser.nextText()));
}else if("email".equals(nodeName)){
//设置email
student.setEmail(xmlPullParser.nextText());
}else if("birthday".equals(nodeName)){
//设置birthday
student.setBirthday(xmlPullParser.nextText());
}else if("memo".equals(nodeName)){
//设置memo属性
student.setMemo(xmlPullParser.nextText());
}
break;
//结束节点
case XmlPullParser.END_TAG:
if("student".equals(nodeName)){
list.add(student);
student=null;
}
break;
default:
break;
}
eventType=xmlPullParser.next();
}
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} return list;
} public static void main(String[] args) {
List<Student> list=new PullParseXml().PullParseXML();
for(Student student:list){
System.out.println("id:"+student.getId()+"\tgroup:"+student.getGroup()+"\tname:"+student.getName()+"\tsex:"+student.getSex()+"\tage:"+student.getAge()+"\temail:"+student.getEmail()+"\tbirthday:"+student.getBirthday()+"\tmemo:"+student.getMemo());
}
} }

Event_Type事件返回的事件代码:

public static final java.lang.String NO_NAMESPACE = "";

  public static final int START_DOCUMENT = 0;

  public static final int END_DOCUMENT = 1;

  public static final int START_TAG = 2;

  public static final int END_TAG = 3;

  public static final int TEXT = 4;

  public static final int CDSECT = 5;

  public static final int ENTITY_REF = 6;

  public static final int IGNORABLE_WHITESPACE = 7;

  public static final int PROCESSING_INSTRUCTION = 8;

  public static final int COMMENT = 9;

  public static final int DOCDECL = 10;

对XML数据通过PULL解析器进行CURD示意图:

XML解析之PULL的更多相关文章

  1. Xml解析之PULL解析 例2

    <?xml version="1.0" encoding="UTF-8"?> <books> <book id="100 ...

  2. XMl解析之Pull解析

    HttpUtils: package cn.qf.parser; import java.io.BufferedOutputStream; import java.io.FileOutputStrea ...

  3. Xml解析之PULL解析 例1

    <?xml version="1.0" encoding="UTF-8"?> <persons> <person id=" ...

  4. 非常简单的XML解析(SAX解析、pull解析)

    这里只是把解析的数据当日志打出来了 非常简单的xml解析方式 package com.example.demo.service; import java.io.IOException; import ...

  5. Android中XML解析-PULL解析

    前面写了两篇XML解析的Dom和SAX方式,Dom比较符合思维方式,SAX事件驱动注重效率,除了这两种方式以外也可以使用Android内置的Pull解析器解析XML文件. Pull解析器的运行方式与 ...

  6. XML解析PULL

    解析xml是很经常使用的操作,除了SAX和DOM两种最经常使用的解析xml外,Pull解析器解析XML文件. 在Android的源代码中大量的使用Pull解析.pull不仅更加的面相对象,并且使用速度 ...

  7. - XML 解析 总结 DOM SAX PULL MD

    目录 目录 XML 解析 总结 DOM SAX PULL MD 几种解析方式简介 要解析的内容 DOM 解析 代码 输出 SAX 解析 代码 输出 JDOM 解析 代码 输出 DOM4J 解析 代码 ...

  8. 【Android】实现XML解析的几种技术

    本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...

  9. Android 简易XML解析

    首先创建在Android工程中创建一个Assets文件夹 app/src/main/assets 在这里添加一个名为 data.xml的文件,然后编辑这个文件,加入如下XML格式内容 <?xml ...

随机推荐

  1. Flex4之元数据标签使用

    Flex 元数据标签 1.[ArrayElementType] 使用ArrayElementType元数据标签可以让你定义数组元素的数据类型. 程序代码: [ArrayElementType(&quo ...

  2. poj 3252 Round Numbers 【推导·排列组合】

    以sample为例子 [2,12]区间的RoundNumbers(简称RN)个数:Rn[2,12]=Rn[0,12]-Rn[0,1] 即:Rn[start,finish]=Rn[0,finish]-R ...

  3. Android进阶笔记15:ListView篇之图片优化

    1.图片异步加载: (1)处理图片的方式: 如果ListView中自定义的Item中有涉及到大量图片的,一定要对图片进行细心的处理,因为图片占的内存是 ListView 项中最头疼的,处理图片的方法大 ...

  4. VS 无法启动程序

    今天遇到这个问题网上找了很多资料,有很多人都遇到了这个问题,也有很多不同的答案,于是我们个答案都试了一遍都没有解决我这个问题的错误,于是就把控制面板中的打开功能和windows功能里面的Interne ...

  5. iOS 获取内存大小使用情况(进度条显示)

    一.获取设备内存大小方法 //返回存储内存占用比例 - (NSString *)getFreeDiskspaceRate{ float totalSpace; .f; NSError *error = ...

  6. 【gradle报错】error: package org.apache.http does not exist

    导入项目的时候gradle报错 error: package org.apache.http does not exist 解决方法: 在build.gradle中加入 android {   use ...

  7. const 指针与指向const的指针

    最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变 ...

  8. android 代码设置、打开wifi热点及热点的连接

    用过快牙的朋友应该知道它们在两天设备之间传输文件的时候使用的是wifi热点,然后另一台便连接这个热点再进行传输.快牙传输速度惊人应该跟它的这种机制有关系吧.不知道它的搜索机制是怎样的,但我想应该可以通 ...

  9. Windwos下Apache的缓存设置

    1.打开httpd.conf,找到以下几个Module并将其启用(如果没有,可以自行添加)              mod_proxy.so(module_proxy)              m ...

  10. C# 文件的读取、写入和删除

    class Program { static void Main(string[] args) { EmployeeDAL DAL = new EmployeeDAL(); List<Sys_E ...