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

Pull解析器是一个开源的java项目。既能够用于android,也能够用于JavaEE。假设用在javaEE须要把其jar文件放入类路径中。由于Android已经集成进了Pull解析器,所以无需加入不论什么jar文件。android系统本身使用到的各种xml文件,其内部也是採用Pull解析器进行解析的。

Pull解析器的执行方式与 SAX解析器相似。它提供了类似的事件。如:開始元素和结束元素事件,使用parser.next()能够进入下一个元素并触发对应事件。跟SAX不同的是。Pull解析器产生的事件是一个数字,而非方法。因此能够使用一个switch对感兴趣的事件进行处理。当元素開始解析时,调用parser.nextText()方法能够获取下一个Text类型节点的值。

以下代码演示怎样使用Pull解析器:

如有一个person.xml

<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>liming</name>
<age>30</age>
</person>
<person id="20">
<name>zhangxiaoxiao</name>
<age>25</age>
</person>
</persons>

Person实体:

package com.andy.domain;

public class Person {

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

完毕读写person.xml的PersonService类

package com.andy.service;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List; import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer; import android.util.Xml; import com.andy.domain.Person; public class PersonService { public static List<Person> getPersons(InputStream xml)
throws XmlPullParserException, IOException { List<Person> persons = null;
Person person = null; // XmlPullParser pullParser =
// XmlPullParserFactory.newInstance().newPullParser();
XmlPullParser pullParser = Xml.newPullParser(); pullParser.setInput(xml, "UTF-8"); // 为xml设置要解析的xml数据 int eventType = pullParser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT: persons = new ArrayList<Person>();
break; case XmlPullParser.START_TAG:
if ("person".equals(pullParser.getName())) {
int id = Integer.valueOf(pullParser.getAttributeValue(0));
person = new Person();
person.setId(id);
} if ("name".equals(pullParser.getName())) {
String name = pullParser.nextText();
person.setName(name); } if ("age".equals(pullParser.getName())) {
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; } eventType = pullParser.next(); } return persons;
} public static void savePerson(List<Person> persons,
OutputStream outputStream) throws IllegalArgumentException,
IllegalStateException, IOException { XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(outputStream, "UTF-8"); serializer.startDocument("UTF-8", true);
serializer.startTag(null, "persons");
for (Person person : persons) {
serializer.startTag(null, "person");
serializer.attribute(null, "id", person.getId().toString());
serializer.startTag(null, "name"); serializer.text(person.getName()); serializer.endTag(null, "name"); serializer.startTag(null, "age");
serializer.text(person.getAge().toString());
serializer.endTag(null, "age"); serializer.endTag(null, "person");
} serializer.endTag(null, "persons");
serializer.endDocument(); outputStream.flush();
outputStream.close(); } }

XML解析PULL的更多相关文章

  1. Android中XML解析-PULL解析

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

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

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

  3. 网络获取数据的Xml的Pull解析

    网络获取的XML的Pull解析 <?xml version="1.0" encoding="utf-8" ?> - <students> ...

  4. Xml解析之PULL解析 例2

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

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

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

  6. XML的Pull解析

    //通过xml解析串    private void XMLtoStr(String result) {        News news=null;        try {             ...

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

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

  8. Android 简易XML解析

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

  9. JAVA基础学习之XMLCDATA区、XML处理指令、XML约束概述、JavaBean、XML解析(8)

    1.CDATA区在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理.遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直 ...

随机推荐

  1. svg优雅降级技术

    这是一个名叫Alexey Ten首先提出来的,类似下面的代码: <svg width="96" height="96"> <image xli ...

  2. AC日记——三连击 洛谷 P1008

    题目背景 本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序. 题目描述 将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2: ...

  3. HTML-loading动画1

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. null相关

    本文转自:http://www.cnblogs.com/peida/archive/2013/06/14/Guava_Optional.html null代表不确定的对象: Java中,null是一个 ...

  5. 贪心—— P1809 过河问题_NOI导刊2011提高(01)

    洛谷——P1809 过河问题_NOI导刊2011提高(01) 题目描述 有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸.而东岸边有一条小船. 船太小了,一次只能 ...

  6. iOS -- 开源项目和库

    TimLiu-iOS 目录 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与Toast 对话框 其他UI 动画 侧滑与右滑返回手势 gif动画 ...

  7. Keras学习

    参加比赛用到了keras,虽然之前用tensorflow,但是感觉tensorflow的确不太友好,api比较难读,然后就学习keras使用 随着深入,发现keras的api确实比较友好 跑了一些ex ...

  8. [c#菜鸟]lambda表达式

    what 一.定义 Lambda 表达式是一种可用于创建 委托 或 表达式目录树 类型的 匿名函数 .通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数.(微软) 理 ...

  9. angular - 介绍

    导入全局样式,生产环境和浏览器环境都导入了. 不知否你还记得index.html那个里面的节点 熟悉吗? 很熟悉吧

  10. 在A页面刷新父框架中的B页面.(window.parent.?.location="")

    window.parent.leftFrame.location='left.jsp?menuid='+menu.id+'&menuname='+menu.title;