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文档。通过掌握这一技术,开发者可以更好地处理XML数据,提高程序的性能和稳定性。在进行XML操作时,还需注意数据的正确性和...
我们将讲解如何使用Pull解析器读取本地XML文件,并生成一个新的、格式不同的XML文件。 Pull解析是一种事件驱动的解析方法,它不像DOM解析那样将整个XML文档加载到内存中,而是按需逐个处理XML元素。这种方法节省了...
如果XML文件较小,结构复杂,或者需要频繁解析,PULL可能是更好的选择;反之,如果文件大且结构简单,SAX的效率和内存效率优势就显现出来。 为了更好地理解这两种解析方式,可以参考提供的博客文章...
本文将深入探讨如何使用Pull解析器来解析和生成XML文件,特别关注Android环境下的应用。 ### Pull解析器概述 Pull解析器是一种事件驱动型的XML解析器,它允许开发者通过一系列的事件来读取和解析XML文档。与SAX...
XML Pull解析器在Android开发中广泛使用,尤其是在处理大型XML文件或实时数据流时,其效率和低内存占用是关键优势。掌握XML Pull解析和生成技术对于Android开发者来说是必备技能之一,能够提高应用的性能和用户体验...
在Android系统中,XML Pull解析是一种轻量级且高效的解析XML文档的方法,它允许应用程序按需读取XML文档的节点,而无需加载整个文档到内存中。以下是关于Android XML Pull解析的详细知识讲解。 1. **XML Pull解析器...
本篇将深入探讨Android下Pull解析器的使用,以及如何利用它来解析和生成XML文件。 一、Android Pull解析器简介 Pull解析器是基于事件驱动的解析模型,它不保留整个XML文档的内存映像,而是按需读取和处理XML元素。...
本文将详细介绍基于Pull解析器的XML解析生成工具类的实现,以及如何将XML文件转换为对象和将对象转换为XML文件。 1. **XML解析器的初始化** 在使用Pull解析器之前,首先需要通过`XmlPullParserFactory`工厂类创建`...
本篇文章将深入探讨如何在Android环境中使用内置的Pull解析器来解析和生成XML内容。 首先,我们需要理解什么是Pull解析器。Pull解析器是一种事件驱动的解析模型,它不像SAX解析器那样需要开发者提供回调方法,而是...
你可以尝试解析一个简单的XML文件,从中提取出必要的信息,或者反过来,根据已有的数据结构生成XML文档。通过动手实践,你可以更好地理解和掌握Pull解析器的工作机制。 为了更好地学习这一知识点,你可以参考`15_...
在Android开发中,处理XML数据是一项常见的任务,而Android提供了内置的Pull解析器来高效地读取和生成XML文件。本文将详细介绍如何使用Pull解析器来操作XML。 首先,我们来理解什么是Pull解析器。Pull解析器是一种...
与SAX解析器类似,Pull解析器不需要预先加载整个XML文档到内存,而是逐个处理XML元素,从而减少了内存消耗,特别适合于处理大型XML文件。接下来,我们将详细介绍Pull解析XML文件的过程。 1. **引入Pull解析器库** ...
XML(eXtensible Markup Language...总结,PULL解析器是Android开发中处理XML文件的一种高效手段,尤其适用于资源有限的移动环境。通过掌握其工作原理和使用方法,开发者可以更好地优化应用程序的性能,提高用户体验。
在Android中,XML Pull解析是一种轻量级处理XML文档的方式,它允许应用移动通过XML文档的结构,而无需预先加载整个文档到内存。这使得解析大型XML文件成为可能,同时减少了对系统资源的需求。Android提供了名为`org....
本项目"android pull解析 创建xmlw文件"是一个完整的工程示例,旨在帮助开发者理解和应用XML Pull解析来创建XML文件,尤其是XMLW格式的文件。下面我们将详细探讨XML Pull解析的工作原理以及如何在Android中实现。 1...
"Android利用Pull生成XML文件"这一主题涉及到的是如何使用Android的Pull解析器来读取和生成XML内容。Pull解析器是一种轻量级、低级别的解析机制,与DOM(文档对象模型)和SAX(简单API for XML)解析器相比,它更...
生成XML文件可以方便地存储和传输数据,而PULL解析器则提供了一种高效、低内存消耗的方式来解析XML数据。理解并熟练掌握这些技术对于Android开发者来说至关重要,尤其是在处理大量XML数据或进行网络通信时。在实际...
3. 使用`parse`方法解析XML文件,传入文件和之前创建的处理器。 **PULL解析器**: PULL解析器是Android平台上的特有解析方式,其工作原理与SAX类似,但API更加简化,更适合移动设备资源有限的情况。在Android中,...
SAX解析适合大型XML文件和复杂结构,而PULL解析则适用于小型XML文件和简单结构。在提供的`SAXParseDemo`项目中,你可以找到具体的SAX解析实现,通过阅读和理解代码,可以更好地掌握这两种解析方法的使用。 总之,...
本文将深入探讨如何使用SAX、DOM和Pull解析器解析XML文件,以及如何生成XML文件。我们将同时展示Java和Kotlin两种语言的实现方法。 一、SAX解析XML文件 SAX(Simple API for XML)是一种事件驱动的解析器,它不会一...