`
liaokang.java
  • 浏览: 155526 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

Android采用Pull解析和生成xml文档

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

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

需要解析的xml文件如下
android.xml位置放在src目录下
<?xml version="1.0" encoding="UTF-8"?>
<persons>
	<person id="1">
		<name>张三</name>
		<age>20</age>
	</person>
	<person id="2">
		<name>李四</name>
		<age>30</age>
	</person>
</persons>


将Person对象封装起来的bean为
package com.lamp.domain;

public class Person {
	private Integer id = null;
	private String name = null;
	private Integer age = null;
	public Person(){}
	public Person(int id, String name, int age) {
		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;
	}
}



业务层解析代码如下
package com.lamp.service;

import java.io.IOException;
import java.io.InputStream;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;

import android.util.Xml;

import com.lamp.domain.Person;

public class PullPersonService {
	public static String PERSON = "person";
	public static String NAME = "name";
	public static String AGE = "age";
	public static String PERSONS = "persons";
	
	//从xml文件中读取数据
	public static List<Person> pullReadXml(InputStream is) throws Exception {
		List<Person> personList = null;
		Person person = null;
		XmlPullParser parser = Xml.newPullParser();
		parser.setInput(is, "UTF-8");
		int eventCode = parser.getEventType();
		while (eventCode != XmlPullParser.END_DOCUMENT) {
			switch (eventCode) {
			case XmlPullParser.START_DOCUMENT:
				personList = new ArrayList<Person>();
				break;
			case XmlPullParser.START_TAG:
				//判断开始标签元素是否是person
				if(PERSON.equals(parser.getName())){
					person = new Person();
					person.setId(new Integer(parser.getAttributeValue(0)));
				}else if(person != null){
					if(NAME.equals(parser.getName())){
						person.setName(parser.nextText());
					}if(AGE.equals(parser.getName())){
						person.setAge(new Integer(parser.nextText()));
					}
				}
				break;

			case XmlPullParser.END_TAG:
				if(PERSON.equals(parser.getName()) && person!=null){
					personList.add(person);
					person = null;
				}
				break;
			}
			//进入下一个元素并触发相应事件
			eventCode = parser.next();
		}
		return personList;
	}
	
	//将数据写入xml文件
	public static void writeToXml(List<Person> personList,Writer writer) throws Exception, IllegalStateException, IOException{
		XmlSerializer serializer = Xml.newSerializer();
		serializer.setOutput(writer);
		serializer.startDocument("UTF-8", true);
		serializer.startTag(null, PERSONS);
		
		for(Person person : personList){
			serializer.startTag(null, PERSON);
			serializer.attribute(null, "id", String.valueOf(person.getId()));
			
			serializer.startTag(null, NAME);
			serializer.text(person.getName());
			serializer.endTag(null, NAME);
			
			serializer.startTag(null, AGE);
			serializer.text(String.valueOf(person.getAge()));
			serializer.endTag(null, AGE);
			
			serializer.endTag(null, PERSON);
		}
		serializer.endTag(null, PERSONS);
		serializer.endDocument();
		writer.flush();
		writer.close();
	} 
}



最后通过JUnit进行测试
package com.lamp.service;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;

import org.xml.sax.SAXException;

import android.content.Context;
import android.test.AndroidTestCase;
import android.util.Log;

import com.lamp.domain.Person;

public class PersonServiceTest extends AndroidTestCase {
	private static final String TAG = "PersonServiceTest";
	//测试读取xml文件
	public void testReadXML() throws Exception, SAXException, IOException{
		InputStream is = PersonServiceTest.class.getClassLoader().getResourceAsStream("android.xml");
		List<Person> persons = PullPersonService.pullReadXml(is);
		for(Person person : persons){
			Log.i(TAG, person.getName()); 
		}
	}
	
	//测试写xml数据
	public void testWriteToXml() throws Exception{
		//写到手机中
		//FileOutputStream os = this.getContext().openFileOutput("persons.xml", Context.MODE_PRIVATE);
		//写到SDK卡中
		FileOutputStream os = new FileOutputStream(new File(Environment.getExternalStorageDirectory(),"persons.xml"));		
        OutputStreamWriter writer = new OutputStreamWriter(os,"UTF-8");
		BufferedWriter bufWriter = new BufferedWriter(writer);
		List<Person> personList = new ArrayList<Person>();
		personList.add(new Person(1,"张三",30));
		personList.add(new Person(2,"李四",50));
		personList.add(new Person(3,"王五",70));
		PullPersonService.writeToXml(personList, bufWriter);
	}
}

分享到:
评论

相关推荐

    android xml pull解析示例

    在Android系统中,XML Pull解析是一种轻量级且高效的解析XML文档的方法,它允许应用程序按需读取XML文档的节点,而无需加载整个文档到内存中。以下是关于Android XML Pull解析的详细知识讲解。 1. **XML Pull解析器...

    Android中,使用SAX和PULL解析天气预报XML

    该文章详细介绍了在Android环境下如何使用SAX和PULL解析XML,包括代码示例和步骤说明,对于初学者来说非常有帮助。 最后,压缩包中的"Weather"文件很可能是示例的天气预报XML数据。通过实际解析这个文件,你可以更...

    Pull解析与生成Xml

    总结起来,Pull解析是处理XML文档的一种高效方式,它避免了大量内存占用,适合处理大型XML文件。通过Pull解析,我们可以读取本地XML文件,并根据需要生成新的、格式不同的XML文件。结合`javax.xml.transform`包,...

    android之Pull解析XML文件

    Pull解析器是Android提供的一个API,它允许应用程序通过事件驱动的方式解析XML文档。与SAX解析器类似,Pull解析器不需要预先加载整个XML文档到内存,而是逐个处理XML元素,从而减少了内存消耗,特别适合于处理大型...

    android下的pull解析器解析和生成xml文件

    总结,Android的Pull解析器提供了一种高效、轻量级的方式处理XML文档,无论是解析还是生成,都具有较高的灵活性和性能优势。在实际开发中,可以根据具体需求选择合适的解析策略,以优化应用的性能和资源使用。

    Android利用pull生成xml文件

    "Android利用Pull生成XML文件"这一主题涉及到的是如何使用Android的Pull解析器来读取和生成XML内容。Pull解析器是一种轻量级、低级别的解析机制,与DOM(文档对象模型)和SAX(简单API for XML)解析器相比,它更...

    采用pull解析器解析和生成xml内容

    Pull解析器是一种事件驱动的解析模型,它不像SAX解析器那样需要开发者提供回调方法,而是由解析器自身推动解析过程,开发者通过调用一系列的“pull”方法来获取XML文档中的元素和属性信息。这种模式使得代码更简洁,...

    使用pull解析器解析和生成xml文件

    在Android开发中,Pull解析器被广泛应用于处理各种XML配置文件和数据文件。 ### 解析XML文件 在给定的示例中,我们有一个名为`Person.xml`的XML文件,以及一个用于存储和操作数据的`Person`类。`Person`类包含了...

    android SAX PULL 解析XML文件 代码 详解

    SAX解析适合大型XML文件和复杂结构,而PULL解析则适用于小型XML文件和简单结构。在提供的`SAXParseDemo`项目中,你可以找到具体的SAX解析实现,通过阅读和理解代码,可以更好地掌握这两种解析方法的使用。 总之,...

    Android 生成和PULL解析xml

    本文将深入探讨如何在Android中生成XML文件以及如何使用PULL解析器来解析XML数据。 首先,我们来看一下如何在Android中生成XML文件。生成XML文件通常涉及创建一个XMLWriter对象,然后通过调用其方法来添加元素、...

    android pull解析 创建xmlw文件

    本项目"android pull解析 创建xmlw文件"是一个完整的工程示例,旨在帮助开发者理解和应用XML Pull解析来创建XML文件,尤其是XMLW格式的文件。下面我们将详细探讨XML Pull解析的工作原理以及如何在Android中实现。 1...

    Android中使用pull解析器操作xml文件的解决办法

    在Android开发中,处理XML数据是一项常见的任务,而Android提供了内置的Pull解析器来高效地读取和生成XML文件。本文将详细介绍如何使用Pull解析器来操作XML。 首先,我们来理解什么是Pull解析器。Pull解析器是一种...

    Android 采用pull生成XML数据

    本篇文章将深入探讨如何在Android中使用Pull解析器生成XML数据。 Pull解析器是一种轻量级的解析方式,相比DOM(Document Object Model)和SAX(Simple API for XML),它更节省内存且效率更高。Pull解析器遵循事件...

    在android中使用pull解析xml文件

    三、创建XML Pull解析器 首先,我们需要实例化`XmlPullParserFactory`,然后通过工厂方法获取`XmlPullParser`实例: ```java XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); factory....

    android 解析XML文件 生成XML文件

    本文将深入探讨如何使用SAX、DOM和Pull解析器解析XML文件,以及如何生成XML文件。我们将同时展示Java和Kotlin两种语言的实现方法。 一、SAX解析XML文件 SAX(Simple API for XML)是一种事件驱动的解析器,它不会一...

    Android 封装pull解析xml

    Pull解析器(XMLPullParser)是Android SDK提供的一种轻量级、高效的XML解析方式,它不需要创建整个XML文档的树结构,而是通过事件触发的方式解析XML,从而节省内存资源。以下是一些关于封装Pull解析XML的关键知识点...

    android pull解析xml源码

    "Android pull解析xml源码"这个主题聚焦于使用Android的XML Pull解析器来理解和操作XML文档。Pull解析器是一种事件驱动的解析方法,与DOM(Document Object Model)和SAX(Simple API for XML)不同,它不需要将整个...

    pull解析器通用解析XML与生成XML

    标题中的“pull解析器通用解析XML与生成XML”是指一种基于Pull解析模型处理XML文档的技术。在Android系统中,XML Pull解析器是一个轻量级、高效的解析XML文档的工具,它不需要DOM(Document Object Model)或者SAX...

    android使用pull生成xml

    本项目主要探讨如何在Android中通过Pull解析器来生成XML文档,这是一种高效、轻量级的解析XML的方式,特别适合在内存有限的移动设备上使用。 首先,我们来理解什么是Pull解析器。在Android中,XMLPullParser是...

    Android ReadXmlByPull 使用Pull解析Xml文件.rar

    本教程将详细介绍如何在Android中利用Pull解析器(PullParser)来读取XML文件,这是一种高效且内存友好的方式。 首先,让我们了解什么是Pull解析器。Pull解析器是一种事件驱动的解析模型,它不创建整个XML文档树,...

Global site tag (gtag.js) - Google Analytics