安卓系列三(使用pull 方式解析xml文件)

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.XmlSerializer;

import android.annotation.SuppressLint;

import android.util.Xml;

import com.example.domain.Person;

/**

* @author wesley

* @version

* @date 2015年1月26日 上午11:32:09

*

*/

public class XmlService {

/**

* 读取数据

* @param xml 要读取的数据

* @return

* @throws Exception

*/

@SuppressLint("UseValueOf")

public static List<Person> readXml(InputStream xml) throws Exception{

List<Person> persons = null;

Person person = null;

//创建一个Pull实例

XmlPullParser pullParser = Xml.newPullParser();

//为Pull解析器设置要解析的XML数据

pullParser.setInput(xml, "UTF-8");

//得到第一个事件

int event = pullParser.getEventType();

//判断是不是文档结束事件

while(event != XmlPullParser.END_DOCUMENT){

switch (event) {

case XmlPullParser.START_DOCUMENT:

persons = new ArrayList<Person>();

break;

case XmlPullParser.START_TAG:

if("person".equals(pullParser.getName())){

int id = new Integer(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 = new Integer(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;

}

/**

* 保存数据

* @param persons 数据

* @param out  输入方向

* @throws Exception

*/

public static void saveXml(List<Person> persons,OutputStream out) throws Exception{

//创建一个序列化实例

XmlSerializer serializer = Xml.newSerializer();

//设置输出流

serializer.setOutput(out, "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();

out.flush();

out.close();

}

}

时间: 2024-10-09 22:00:15

安卓系列三(使用pull 方式解析xml文件)的相关文章

通过Pull方式解析xml文件

说明:此案例使用的是通过Sax方式解析xml文件这篇文章里的布局文件.City类和china.xml文件(此文件内包含两种格式),所以只需要完成MainActivity和PullXml就行了,在于展示如何使用Pull方式解析xml文件. 1. PullXml类的主要代码如下: <span style="font-size:14px;">public class PullXml { public List<City> pullXml() { List<Cit

Android中使用PULL方式解析XML文件

Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理.当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值. 下面我们通过Demo例子来介绍如何使用PULL机制来解析XML文件.先看下如下工程的目录结构: 按以下步骤进行操作: [1]

pull 方式解析xml文件

XmlPullParser解析xml的android文档docs/reference/org/xmlpull/v1/XmlPullParser.html xmlPullParer官网:http://www.xmlpull.org/ 例子:要解析的文件:pull.xml <?xml version="1.0" encoding="UTF-8"?> <Customer>  <PersonName>   <SurName>张

Pull方式解析XML文件

package com.pingyijinren.test; import android.content.Intent; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import a

利用pull方式进行xml文件查看天气

1.需要使用到的java文件 解析china.xml文件中的内容. 利用pull方式进行xml文件步骤: ①直接创建出XmlPullParser解析器对象  XmlPullParser xmlPullParser = Xml.newPullParser(); ②设置解析的文件输入流 并且制定输入流在操作方式中的编码方式    xmlPullParser.setInput(getClass().getClassLoader().getResourceAsStream("china.xml"

Java之Pull方式生成xml文件和解析xml文件

Pull XML解析器早已经被google集成到android sdk当中,它是google官方推荐的解析器. 如果我们要在Java桌面.J2ME等当中使用Pull方式生成xml文件和解析xml文件,需要用到kxml2: KXML解析器是基于普通XML PULL解析器的一个小巧的解析器,官网是http://kxml.org/ 普通XML PULL解析器的官网是http://xmlpull.org/ 实验开始: 在Eclipse中新建一个java项目,其中新建一个libs文件夹,拷贝从网上下载的k

SAX方式解析xml文件查看天气

1.SAX方式解析xml文件的步骤: ①创建解析器工厂对象 ②使用当前配置的工厂参数创建SAXParser对象 ③解析xml文件 ④利用DefaultHandler创建事件驱动者 2.对于标签对象进行引用怎么办? ①定义当前解析的标签:private String tagName=null; ②在startElement()方法中赋值tagName:this.tagName=qName; ③在endElement()方法中将tagName赋值为空:this.tagName=null; ④在cha

通过Dom方式解析xml文件

此项目通过简单的天气情况显示来实现xml文件的解析 1. 搭建环境 1)创建如下图的包.类及文件 2)布局文件的大概样式如下图所示,用到四个TextView控件和一个RadioGroup控件 3)china.xml文件的内容如下 <?xml version="1.0" encoding="UTF-8"?> <china dn="day"> <city cityname="南京" pyName=&q

通过Sax方式解析xml文件

说明:此案例使用的是通过Dom方式解析xml文件这篇文章里的City类和china.xml文件. 1. 因为xml文件有两种格式,一是上面那篇文章里的那种元素节点里只包含属性节点,另一种就是元素节点里包含元素节点和文本节点,于是在china.xml中添加如下代码,以实现两种方式的解析: <city> <cityname>杭州</cityname> <pyName>zhejiang</pyName> <quName>浙江</quN