`
ssun125
  • 浏览: 44628 次
文章分类
社区版块
存档分类
最新评论

在Android应用中使用Pull解析XML文件(传智播客视频笔记)

 
阅读更多

Service.java源码:

package com.sinaapp.ssun.service;

import java.io.InputStream;
import java.io.OutputStream;
import java.util.*;

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

import android.util.Xml;

import com.sinaapp.ssun.domain.Person;

public class Service {
	/**
	 * 获取XML文件中的数据
	 * @param xml
	 * @return
	 * @throws Exception
	 */
	public static List<Person> getPersons(InputStream xml) throws Exception {
		List<Person> persons = null;
		XmlPullParser parser = XmlPullParserFactory.newInstance()
				.newPullParser();
		// parser = Xml.newPullParser();
		parser.setInput(xml, "UTF-8");
		int event = parser.getEventType();
		Person p = null;
		while (event != XmlPullParser.END_DOCUMENT) {
			switch (event) {
			case XmlPullParser.START_DOCUMENT:
				persons = new ArrayList<Person>();
				break;
			case XmlPullParser.START_TAG:
				if("person".equals(parser.getName())){
					p = new Person();
					int id = Integer.parseInt(parser.getAttributeValue(0));
					p.setId(id);
				}
				if("name".equals(parser.getName())){
					String name = parser.nextText();
					p.setName(name);
				}
				if("age".equals(parser.getName())){
					int age = Integer.parseInt(parser.nextText());
					p.setAge(age);
				}
				break;
			case XmlPullParser.END_TAG:
				if("person".equals(parser.getName())){
					persons.add(p);
					p = null;
				}
				break;
			}
			event = parser.next();
		}
		return persons;
	}
	
	/**
	 * 保存数据到XML文件中
	 * @param persons
	 * @param out
	 * @throws Exception
	 */
	public static void save(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 p: persons){
			serializer.startTag(null, "person");
			serializer.attribute(null, "person", p.getId()+"");
			
			serializer.startTag(null, "name");
			serializer.text(p.getName());
			serializer.endTag(null, "name");
			
			serializer.startTag(null, "age");
			serializer.text(p.getAge()+"");
			serializer.endTag(null, "age");
			
			serializer.endTag(null, "person");
		}
		serializer.endTag(null, "persons");
		serializer.endDocument();
		out.flush();
		out.close();
	}
}



Person.java源码:

package com.sinaapp.ssun.domain;

public class Person {
	private String name;
	private int age;
	private int id;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	public Person(String name, int age, int id) {
		this.name = name;
		this.age = age;
		this.id = id;
	}
	public Person() {
		super();
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", id=" + id + "]";
	}
}

text.xml文件:

<!--test.xml-->
<?xml version="1.0" encoding="UTF-8"?><!-- 开始文档语法 -->
<persons>
    	<person  id="1">
    	    <name>ssun</name>
    	    <age>19</age>
    	</person>
    	<person  id="2">
    	    <name>cobe</name>
    	    <age>24</age>
    	</person>
</persons>

单元测试TestService.java源码:

package com.sinaapp.ssun.test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

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

import com.sinaapp.ssun.domain.Person;
import com.sinaapp.ssun.service.Service;

public class TestService extends AndroidTestCase {
	private final String Tag = "Test";
	
	public void testPersons() throws Exception{
		List<Person> persons = Service.getPersons(this.getClass().getClassLoader().getResourceAsStream("test.xml"));
		for(Person p : persons){
			Log.i(Tag, p.toString());
		}
	}
	
	public void testSave() throws Exception{
		List<Person> persons = new ArrayList<Person>();
		persons.add(new Person("www",19,23));
		persons.add(new Person("hhh",19,3));
		persons.add(new Person("qqq",19,24)); 
		persons.add(new Person("ooo",19,25));
		File file = new File(this.getContext().getFilesDir(),"test2.xml");
		FileOutputStream out = new FileOutputStream(file);
		Service.save(persons, out);
	}
	
}
  

分享到:
评论

相关推荐

    在android中使用pull解析xml文件

    本文将深入探讨如何在Android中使用Pull解析器解析XML文件。 一、XML Pull解析器简介 XML Pull解析器(XML Pull API)是一种基于事件驱动的解析模型,它不需预先加载整个XML文档,而是逐行读取,当遇到特定的XML...

    android使用pull 解析xml文件源码

    pull解析xml文件,和sax和dom一样 都可以脱离android单独使用,pull和sax的原理一样,不一样的地方是pull读取xml文件后调用方法返回的是数字, 读取到xml的声明返回数字0 START_DOCUMENT; 读取到xml的结束返回数字1 ...

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

    在Android中,使用SAX解析天气预报XML,我们需要创建一个继承自DefaultHandler的类,重写其中的startElement、endElement和characters等方法,以捕获XML中的节点信息。例如,当遇到"city"标签时,startElement方法会...

    android之Pull解析XML文件

    本文将深入探讨如何在Android中使用Pull解析器来处理XML文件,这是一种高效且节省资源的方式。 Pull解析器是Android提供的一个API,它允许应用程序通过事件驱动的方式解析XML文档。与SAX解析器类似,Pull解析器不...

    android中使用PULL解析XML

    本文将深入探讨如何在Android中使用PULL解析器(Pull Parser)来解析XML文档,这是一种轻量级且高效的解析方式。 **PULL解析器概述** PULL解析器(Pull Parsing)是一种事件驱动的解析模型,它不需要完整的XML文档...

    使用Pull解析xml文件

    在Android开发中,解析XML有多种方式,包括DOM(Document Object Model)、SAX(Simple API for XML)以及PULL(PULL Parser)。本篇文章将详细探讨PULL解析器,它是Android平台特有的一种轻量级、事件驱动的XML解析...

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

    在Android开发中,处理XML数据是一项常见的任务,无论是从服务器获取数据还是本地资源,XML都是一个常用的数据交换格式。本文将深入探讨两种主要的XML解析技术:SAX(Simple API for XML)和PULL(Pull Parser)。这...

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

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

    pull解析xml文件

    pull解析xml文件

    android xml pull解析示例

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

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

    在IT行业中,XML(eXtensible Markup Language)是一种重要的数据交换格式,广泛应用于网络通信、数据存储和配置文件等领域。本篇文章将深入探讨如何使用Pull解析器来读取XML文件,以及如何生成XML文件。Pull解析器...

    Android ReadXmlByPull 使用Pull解析Xml文件.zip项目安卓应用源码下载

    Android ReadXmlByPull 使用Pull解析Xml文件.zip项目安卓应用源码下载Android ReadXmlByPull 使用Pull解析Xml文件.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目...

    android下解析xml文件的demo

    在Android应用中,我们通常使用两种方式来解析XML:DOM(Document Object Model)解析器和SAX(Simple API for XML)解析器。 1. DOM解析: DOM解析器将整个XML文件加载到内存中,形成一个树形结构,可以方便地遍历...

    Android代码-ReadXmlByPull使用Pull解析Xml文件.zip

    本资源"ReadXmlByPull使用Pull解析Xml文件.zip"聚焦于Android中如何使用Pull解析器来读取XML数据。Pull解析器是一种轻量级、低内存占用的解析方式,尤其适合移动设备。 一、什么是Pull解析器? Pull解析器(Pull...

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

    在Android开发中,处理XML数据是一项常见的任务,无论是读取配置文件、同步网络数据还是解析服务器返回的结果,都可能涉及到XML的解析。本教程将详细讲解如何使用Android的Pull解析器来读取XML文件,这是一种高效且...

    Pull解析xml源码导入即可用

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

    老罗Android视频开发教程 android解析xml文件代码

    通过老罗的Android视频教程,开发者可以学习到如何有效地解析XML文件,提升在Android开发中的数据处理能力。不论是DOM、SAX还是Pull解析,每种方法都有其适用场景,理解并熟练掌握这些技术,将对Android应用开发...

    Android源码——ReadXmlByPull 使用Pull解析Xml文件.zip

    本主题将深入探讨如何使用Android中的Pull解析器(Pull Parser)来读取和解析XML文件。Pull解析器是一种事件驱动的解析方式,它不需要完整的XML文档加载到内存中,而是按需读取,降低了内存消耗。 首先,让我们理解...

Global site tag (gtag.js) - Google Analytics