`
java-mans
  • 浏览: 11499310 次
文章分类
社区版块
存档分类
最新评论

android数据存储与访问之使用pull解析器

 
阅读更多
Pull解析器是一个开源的java项目,既可以用于android,也可以用于JavaEE。如果用在javaEE需要把其jar文件放入类路径中,因为Android已经集成进了Pull解析器,所以无需添加任何jar文件。android系统本身使用到的各种xml文件,其内部也是采用Pull解析器进行解析的。 Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。跟SAX不同的是, Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。


如下为要解析的XML文件

文件名称:persons.xml
<?xml version="1.0" encoding="UTF-8"?>
<persons>
    <person id=“18">
        <name>allen</name>
        <age>36</age>
    </person>
    <person id=“28">
        <name>james</name>
        <age>25</age>
    </person>
</persons>



例子定义了一个javabean用于存放上面解析出来的xml内容, 这个javabean为Person,如下:

public class Person {
	private Integer id;
	private String name;
	private Short 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;
	}	
}


使用Pull解析器读取itcast.xml的代码如下:

import org.xmlpull.v1.XmlPullParser;
import android.util.Xml;
import cn.itcast.xml.domain.Person;

public class PullXMLReader {

public static List<Person> readXML(InputStream inStream) {
    XmlPullParser parser = Xml.newPullParser();
    try {
    parser.setInput(inStream, "UTF-8");
    int eventType = parser.getEventType();
    Person currentPerson = null;
    List<Person> persons = null;
    while (eventType != XmlPullParser.END_DOCUMENT) {
        switch (eventType) {
        case XmlPullParser.START_DOCUMENT://文档开始事件,可以进行数据初始化处理
            persons = new ArrayList<Person>();
            break;
        case XmlPullParser.START_TAG://开始元素事件
            String name = parser.getName();
            if (name.equalsIgnoreCase("person")) {
                currentPerson = new Person();
                currentPerson.setId(new Integer(parser.getAttributeValue(null, "id")));
            } else if (currentPerson != null) {
                if (name.equalsIgnoreCase("name")) {
                    currentPerson.setName(parser.nextText());// 如果后面是Text节点,即返回它的值
                } else if (name.equalsIgnoreCase("age")) {
                    currentPerson.setAge(new Short(parser.nextText()));
                }
            }
            break;
        case XmlPullParser.END_TAG://结束元素事件
            if (parser.getName().equalsIgnoreCase("person") && currentPerson != null) {
                persons.add(currentPerson);
                currentPerson = null;
            }
            break;
        }
        eventType = parser.next();
    }
    inStream.close();
    return persons;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
}

使用Pull解析器生成XML文件

有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器。

使用Pull解析器生成一个与persons.xml


使用代码如下(生成XML文件):
File xmlFile = new File("persons.xml");
FileOutputStream outStream = new FileOutputStream(xmlFile);
OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "UTF-8");
BufferedWriter writer = new BufferedWriter(outStreamWriter);
writeXML(persons, writer);
writer.flush();
writer.close();
如果只想得到生成的xml字符串内容,可以使用StringWriter:
StringWriter writer = new StringWriter();
writeXML(persons, writer);
String content = writer.toString();


分享到:
评论

相关推荐

    基于Android XML解析与保存的实现

    解析XML文件:在Android平台上可以使用SAX、DOM和Android附带的pull解析器解析XML文件;pull解析器提供了各种事件,使用parser.next()方法进入下一个元素并触发相应事件,pull解析器产生的事件是一个数字,可以通过...

    8天快速掌握Android系列视频之04_开发与 运行(卸载)第一个ANDROID应用

    息,12_文件的保存与读取,13_文件的操作模式,14_把文件存放在SDCard,15_采用Pull解析器解析和生成XML内容,16_采 用SharedPreferences保存用户偏好设置参数,17_创建数据库与完成数据添删改查,18_在SQLite中...

    8天快速掌握Android系列视频之07_查看应用输出的错误信息 与如何部署应用到真实手机

    息,12_文件的保存与读取,13_文件的操作模式,14_把文件存放在SDCard,15_采用Pull解析器解析和生成XML内容,16_采 用SharedPreferences保存用户偏好设置参数,17_创建数据库与完成数据添删改查,18_在SQLite中...

    Android程序技术:个人学习助手项目习题详情显示.pptx

    Android 程序技术 本节课程内容:习题详情显示 XML概述 XML概述 Summary of XML ...Android中已经集成了PULL解析器。 PULL解析 XML解析 XML parsing XmlPullParser.START_DOCUMENT:XML文档的开始,如&lt;?xml

    Android数据的存储

    通过Xml这个工具类去获取2、设置XmlSerializer序列化器的参数3、开始写xml文档四、Xml的解析1、声明一个pull解析器2、初始化解析器,设置解析哪个流,用什么编码3、获取解析的文档的事件类型4、具体判断一下,解析到...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 ...• SQLite SQLite SQLite SQLite 用作结构化的数据存储 • 多媒体支持 包括常见的音频、视频和...

    Android仿美团团购应用源代码.rar

    Android仿美团团购应用源代码,通过pull解析器取得团购网站最新团购信息,读取存储在SharedPreferences的city_postiotn的数据,将长整型的时间1324322343格式转成2011-8-29。

    8天快速掌握Android教程源码

    15_采用Pull解析器解析和生成XML内容.avi 所在项目:xml 16_采用SharedPreferences保存用户偏好设置参数.avi 所在项目:SharedPreferences 17_创建数据库与完成数据添删改查.avi 所在项目:db 18_在SQLite中使用事务...

    传智播客的android开发源代码

    15_采用Pull解析器解析和生成XML内容.avi 所在项目:xml 16_采用SharedPreferences保存用户偏好设置参数.avi 所在项目:SharedPreferences 17_创建数据库与完成数据添删改查.avi 所在项目:db 18_在SQLite中使用事务...

    xmlPull源码

    在android开发中经常会使用到xml文件,用来保存和传递数据,因此解析xml就是需要掌握的技能了,pull解析器是android自带的解析工具

    AndroidBeginners:此存储库包括基本到中级和中级到专家级的 android 方法

    苹果热门应用 RSSFeed XMLparser 使用 XML Pull 解析器和原生 android 网络请求,此应用程序可以检索苹果的顶级应用程序 rss 提要,并通过替换与苹果商店中应用程序的 xml 标签匹配的其他 Rssfeed,此客户端代码...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--xml文件的pull解析与序列化写入 |--xml的封装序列化 |--任务循环之只在Activity显示时执行 |--修改文件的最后修改时间 |--偏好设置(回显) |--内存优化之各种方法 |--内容提供者之短信的序列化对象读写 |--内容...

    Android典型技术模块开发详解

    10.6.3 使用ContentResolver操作ContentProvider中的数据 10.7 本章小结 第11章 网络通信 11.1 TCP协议 11.1.1 服务端的创建 11.1.2 客户端创建 11.2 UDP协议 11.2.1 服务端的创建 11.2.2 客户端创建 11.3 ...

    source.zip

    15_采用Pull解析器解析和生成XML内容.avi 所在项目:xml 16_采用SharedPreferences保存用户偏好设置参数.avi 所在项目:SharedPreferences 17_创建数据库与完成数据添删改查.avi 所在项目:db 18_在SQLite中使用事务...

    matlab抽签代码-alrec:彩票选取器-使用更高的数学(傅立叶分析等)来选取和计算数字

    matlab抽签代码警报 彩票选取器-使用更高的数学...pull解析器来更新应用程序。 可以从另一个应用程序使用工作中的同步适配器和解析器,但是时间飞逝... 随着CI项目的进行,一些陷阱和步骤将发布在此存储库的Wiki上。

    adb1.0.26包含fastboot.exe

    INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION 解析器遇到异常 INSTALL_PARSE_FAILED_NO_CERTIFICATES 安装包没有签名 INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES 已安装该应用,且签名与 APK 文件不一致 先...

Global site tag (gtag.js) - Google Analytics