`
yaodaqing
  • 浏览: 349510 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Pull解析和生成XML文件

阅读更多
1、XML

<?xml version="1.0" encoding="UTF-8"?>
<persons>
	<person id="23">
		<name>李明</name>
		<age>30</age>
	</person>
	<person id="20">
		<name>李向梅</name>
		<age>25</age>
	</person>
</persons>


2、JAVABean
package com.wynlink.domain;

public class Person {

	private Integer id;
	private String name;
	private Short age;
	
	public Person() {
		super();
	}
	public Person(String name, Short age) {
		super();
		this.name = name;
		this.age = age;
	}
	public Person(Integer id, String name, Short 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 Short getAge() {
		return age;
	}
	public void setAge(Short age) {
		this.age = age;
	}

	//重写toString方法
	@Override
	public String toString() {
		return "id="+id+",name="+name+",age="+age;
	}
	
	
}


package com.wynlink.xml;

import java.io.InputStream;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;

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

import com.wynlink.domain.Person;
import com.wynlink.service.DOMPersonService;
import com.wynlink.service.PullPersonService;
import com.wynlink.service.SAXPersonService;

/**
 * JUnit测试类
 * @author yaodaqing
 *
 */
public class XMLPersonServiceTest extends AndroidTestCase {

	public static final String TAG = "XMLPersonServiceTest";
	
	//使用Pull方法解析XML内容
	public void testPullReadXML() throws Exception{
		InputStream inStream = XMLPersonServiceTest.class.getClassLoader().getResourceAsStream("wynlink.xml");
		List<Person> persons = PullPersonService.readxml(inStream);
		for(Person person : persons){
			Log.i(TAG, person.toString());
		}
	}
	
	//使用Pull方法写入XML内容;写入到手机或者SD卡都可以,加上权限
	public void testPullWriterXML() throws Exception{
		/*1、不带缓冲功能的文件内容输出写法
		 * FileOutputStream outStream = this.getContext().openFileOutput("persons.xml", Context.MODE_WORLD_READABLE);
		OutputStreamWriter writer = new OutputStreamWriter(outStream,"UTF-8");//输出流写入器
		List<Person> persons = new ArrayList<Person>();
		persons.add(new Person(12,"daqing",new Short((short)27)));
		persons.add(new Person(13,"老毕",new Short((short)37)));
		persons.add(new Person(23,"姚大庆",new Short((short)26)));
		PullPersonService.writeXml(persons, writer);*/
		
		/*2、带缓冲功能的文件内容输出写法
		 * FileOutputStream outStream = this.getContext().openFileOutput("persons.xml", Context.MODE_WORLD_READABLE);
		OutputStreamWriter writer = new OutputStreamWriter(outStream,"UTF-8");
		BufferedWriter bufferedWriter = new BufferedWriter(writer);//带缓冲功能
		List<Person> persons = new ArrayList<Person>();
		persons.add(new Person(12,"daqing",new Short((short)27)));
		persons.add(new Person(13,"老毕",new Short((short)37)));
		persons.add(new Person(23,"姚大庆",new Short((short)26)));
		PullPersonService.writeXml(persons, bufferedWriter);//填写缓冲*/
		
		/*
		 * 3、不写入到文件里去
		 * 		只得到生成的完整的XML内容
		 */
		StringWriter writer = new StringWriter();//把数据输出到内存里
		List<Person> persons = new ArrayList<Person>();
		persons.add(new Person(12,"daqing",new Short((short)27)));
		persons.add(new Person(13,"老毕",new Short((short)37)));
		persons.add(new Person(23,"姚大庆",new Short((short)26)));
		PullPersonService.writeXml(persons, writer);
		Log.i(TAG, writer.toString());
	}
}



4、
package com.wynlink.service;

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.wynlink.domain.Person;

/**
 * pull方式解析XML
 * @author yaodaqing
 *
 */
public class PullPersonService {
	
	/**
	 * 写数据到XML文件中
	 * 这里用Writer写入器。当然用流也可以
	 * 		利用StringBuffer或StringBuilder来拼装XML
	 * 此做法是面向对象的做法
	 */
	public static void writeXml(List<Person> persons,Writer writer) throws Exception{
		XmlSerializer serializer = Xml.newSerializer();
		serializer.setOutput(writer);//这里可以接受Writer和OutPutString
		serializer.startDocument("UTF-8", true);//开始文档
		serializer.startTag(null, "persons");//开始标签;如果没有命名空间,则填null
		for(Person person : persons){
			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();
	}

	/**
	 * 从XML文件中读取数据
	 * @param inStream
	 * @return
	 * @throws Exception
	 */
	public static List<Person> readxml(InputStream inStream) throws Exception {
		List<Person> persons = null;
		XmlPullParser parser = Xml.newPullParser();
		parser.setInput(inStream, "UTF-8");
		int eventCode = parser.getEventType();//事件
		Person person = null;
		while(eventCode != XmlPullParser.END_DOCUMENT){//只要事件不等于结束标签,则一直向下读取
			switch (eventCode) {
			case XmlPullParser.START_DOCUMENT:	//文档开始事件
				persons = new ArrayList<Person>();
				break;
			case XmlPullParser.START_TAG:		//开始元素
				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());
					} else if("age".equals(parser.getName())){
						person.setAge(new Short(parser.nextText()));
					}
				}
				break;
			case XmlPullParser.END_TAG:			//结束元素
				if("person".equals(parser.getName()) && person != null){
					persons.add(person);
					person = null;
				}
				break;
			}
			eventCode = parser.next();
		}
		return persons;
	}
}

分享到:
评论

相关推荐

    使用Pull解析器读取XML文件和生成XML文件

    总的来说,使用Pull解析器读取和生成XML文件是一种高效且灵活的方法,尤其适合处理大型XML文档。通过掌握这一技术,开发者可以更好地处理XML数据,提高程序的性能和稳定性。在进行XML操作时,还需注意数据的正确性和...

    Pull解析与生成Xml

    我们将讲解如何使用Pull解析器读取本地XML文件,并生成一个新的、格式不同的XML文件。 Pull解析是一种事件驱动的解析方法,它不像DOM解析那样将整个XML文档加载到内存中,而是按需逐个处理XML元素。这种方法节省了...

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

    如果XML文件较小,结构复杂,或者需要频繁解析,PULL可能是更好的选择;反之,如果文件大且结构简单,SAX的效率和内存效率优势就显现出来。 为了更好地理解这两种解析方式,可以参考提供的博客文章...

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

    本文将深入探讨如何使用Pull解析器来解析和生成XML文件,特别关注Android环境下的应用。 ### Pull解析器概述 Pull解析器是一种事件驱动型的XML解析器,它允许开发者通过一系列的事件来读取和解析XML文档。与SAX...

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

    XML Pull解析器在Android开发中广泛使用,尤其是在处理大型XML文件或实时数据流时,其效率和低内存占用是关键优势。掌握XML Pull解析和生成技术对于Android开发者来说是必备技能之一,能够提高应用的性能和用户体验...

    android xml pull解析示例

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

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

    本篇将深入探讨Android下Pull解析器的使用,以及如何利用它来解析和生成XML文件。 一、Android Pull解析器简介 Pull解析器是基于事件驱动的解析模型,它不保留整个XML文档的内存映像,而是按需读取和处理XML元素。...

    pull解析器解析XML工具类

    本文将详细介绍基于Pull解析器的XML解析生成工具类的实现,以及如何将XML文件转换为对象和将对象转换为XML文件。 1. **XML解析器的初始化** 在使用Pull解析器之前,首先需要通过`XmlPullParserFactory`工厂类创建`...

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

    本篇文章将深入探讨如何在Android环境中使用内置的Pull解析器来解析和生成XML内容。 首先,我们需要理解什么是Pull解析器。Pull解析器是一种事件驱动的解析模型,它不像SAX解析器那样需要开发者提供回调方法,而是...

    Pull解析器解析和生成XML内容

    你可以尝试解析一个简单的XML文件,从中提取出必要的信息,或者反过来,根据已有的数据结构生成XML文档。通过动手实践,你可以更好地理解和掌握Pull解析器的工作机制。 为了更好地学习这一知识点,你可以参考`15_...

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

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

    android之Pull解析XML文件

    与SAX解析器类似,Pull解析器不需要预先加载整个XML文档到内存,而是逐个处理XML元素,从而减少了内存消耗,特别适合于处理大型XML文件。接下来,我们将详细介绍Pull解析XML文件的过程。 1. **引入Pull解析器库** ...

    使用Pull解析xml文件

    XML(eXtensible Markup Language...总结,PULL解析器是Android开发中处理XML文件的一种高效手段,尤其适用于资源有限的移动环境。通过掌握其工作原理和使用方法,开发者可以更好地优化应用程序的性能,提高用户体验。

    Pull解析xml源码导入即可用

    在Android中,XML Pull解析是一种轻量级处理XML文档的方式,它允许应用移动通过XML文档的结构,而无需预先加载整个文档到内存。这使得解析大型XML文件成为可能,同时减少了对系统资源的需求。Android提供了名为`org....

    android pull解析 创建xmlw文件

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

    Android利用pull生成xml文件

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

    Android 生成和PULL解析xml

    生成XML文件可以方便地存储和传输数据,而PULL解析器则提供了一种高效、低内存消耗的方式来解析XML数据。理解并熟练掌握这些技术对于Android开发者来说至关重要,尤其是在处理大量XML数据或进行网络通信时。在实际...

    通过SAX和PULL来解析XML,同时生成xml

    3. 使用`parse`方法解析XML文件,传入文件和之前创建的处理器。 **PULL解析器**: PULL解析器是Android平台上的特有解析方式,其工作原理与SAX类似,但API更加简化,更适合移动设备资源有限的情况。在Android中,...

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

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

    android 解析XML文件 生成XML文件

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

Global site tag (gtag.js) - Google Analytics