`
啸笑天
  • 浏览: 3454186 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

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

阅读更多

Pull解析技术


除了可以使用 SAXDOM解析XML文件大家也可以使用Android内置的Pull解析器解析XML文件。 Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型元素的值。
Pull解析器的源码及文档下载网址:http://www.xmlpull.org/
Pull解析技术是第三方开发的开源技术,它同样可以应用于JavaSE开发。
使用SAX读取XML文件文章中的com.jbridge.xml.service包下添加类:
package com.jbridge.xml.service
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlSerializer;
import com.jbridge.xml.domain.Person;
import android.util.Xml;
public class PullPersonService {
public static List<Person> getPersons(InputStream inStream)
throws Exception {
List<Person> persons = null;
Person person = null;
// 创建Pull解析
// xmlPullParserFactory=XmlPullParserFactory.newInstance();
// XmlPullParser pullParser =xmlPullParserFactory.newPullParser();
XmlPullParser pullParser = Xml.newPullParser();// 这行代码同上面两行
// 解析XML
pullParser.setInput(inStream, "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 (person != null) {
if ("name".equals(pullParser.getName())) {
String name = pullParser.nextText();// 如果后面是Text元素,即返回它的值
person.setName(name);
} else if ("age".equals(pullParser.getName())) {
String age = pullParser.nextText();
person.setAge(new Short(age));
}
}
break;
// 节点结束
case XmlPullParser.END_TAG:
if ("person".equals(pullParser.getName())) {
persons.add(person);
person = null;
}
break;
}
event = pullParser.next();
}
return persons;
}
public static void save(List<Person> persons, OutputStream outStream) throws Exception{
   XmlSerializer serializer = Xml.newSerializer();
   serializer.setOutput(outStream, "UTF-8");
   serializer.startDocument("UTF-8", true);
   serializer.startTag(null, "persons");// serializer.startTag("", "persons");
   for(Person person : persons){
     serializer.startTag(null, "person");// serializer.startTag("", "person");
     serializer.attribute(null, "id", person.getId().toString()); // serializer.attribute("", "id", person.getId().toString());
     serializer.startTag(null, "name");  //serializer.startTag("", "name");
     serializer.text(person.getName());
     serializer.endTag(null, "name");// serializer.endTag("", "name");
     
     serializer.startTag(null, "age"); //serializer.startTag("", "age");
     serializer.text(person.getAge().toString());
     serializer.endTag(null, "age"); // serializer.endTag("", "age");
     serializer.endTag(null, "person");//serializer.endTag("", "person");
   }    
   serializer.endTag(null, "persons");    //serializer.endTag("", "persons"); 
   serializer.endDocument();
   outStream.flush();
   outStream.close();
}
public static void save(List<Person> persons,Writer write) throws Exception{
   XmlSerializer serializer = Xml.newSerializer();
   serializer.setOutput(write);
   serializer.startDocument("UTF-8", true);
   serializer.startTag(null, "persons");// serializer.startTag("", "persons");
   for(Person person : persons){
     serializer.startTag(null, "person");// serializer.startTag("", "person");
     serializer.attribute(null, "id", person.getId().toString()); // serializer.attribute("", "id", person.getId().toString());
     serializer.startTag(null, "name");  //serializer.startTag("", "name");
     serializer.text(person.getName());
     serializer.endTag(null, "name");// serializer.endTag("", "name");
     
     serializer.startTag(null, "age"); //serializer.startTag("", "age");
     serializer.text(person.getAge().toString());
     serializer.endTag(null, "age"); // serializer.endTag("", "age");
     serializer.endTag(null, "person");//serializer.endTag("", "person");
   }    
   serializer.endTag(null, "persons");    //serializer.endTag("", "persons"); 
   serializer.endDocument();
   write.flush();
   write.close();
}
}

使用SAX读取XML文件文章中的TestService类下添加方法:
public void testPullGetPersons() throws Throwable{
InputStream inStream = this.getClass().getClassLoader().getResourceAsStream("person.xml");
PullPersonService pullPersonService=new PullPersonService();
List<Person> persons = pullPersonService.getPersons(inStream);
for(Person person : persons){
Log.i(TAG, person.toString());
}
}
public void testPullSave() throws Throwable{
// List<Person> persons = new ArrayList<Person>();
// persons.add(new Person(34, "xiaozhang", (short)30));
// persons.add(new Person(56, "xiaozhu", (short)12));
// persons.add(new Person(89, "xiaoli", (short)50));
// File file = new File(this.getContext().getFilesDir(), "zyj.xml");//  /data/data/com.jbridge.xml.activity/files/zyj.xml
// FileOutputStream outStream = new FileOutputStream(file);
// BufferedOutputStream b=new BufferedOutputStream(outStream);
// OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "UTF-8");
// BufferedWriter writer = new BufferedWriter(outStreamWriter);
// PullPersonService.save(persons, b);
// List<Person> persons = new ArrayList<Person>();
// persons.add(new Person(34, "xiaozhang", (short)30));
// persons.add(new Person(56, "xiaozhu", (short)12));
// persons.add(new Person(89, "xiaoli", (short)50));
// File file = new File(this.getContext().getFilesDir(), "zyj.xml");
// FileOutputStream outStream = new FileOutputStream(file);
// OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "UTF-8");
// BufferedWriter writer = new BufferedWriter(outStreamWriter);
// PullPersonService.save(persons, writer);
// 生成到内存中。
List<Person> persons = new ArrayList<Person>();
persons.add(new Person(34, "xiaozhang", (short)30));
persons.add(new Person(56, "xiaozhu", (short)12));
persons.add(new Person(89, "xiaoli", (short)50));
StringWriter sw=new StringWriter();
PullPersonService.save(persons,sw);
Log.i(TAG, sw.toString());
}

  • xml.rar (121.3 KB)
  • 下载次数: 65
分享到:
评论

相关推荐

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

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

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

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

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

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

    Pull解析与生成Xml

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

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

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

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

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

    使用Pull解析xml文件

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

    Android中采用Pull解析器读取和生成xml内容案例

    本案例将深入探讨如何使用Pull解析器读取和生成XML内容。 首先,理解XMLPullParser的工作原理至关重要。它通过移动到文档的不同事件(如START_TAG、END_TAG、TEXT等)来解析XML,这样开发者可以逐个处理元素,而不...

    pull解析器解析XML工具类

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

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

    与SAX(Simple API for XML)和DOM(Document Object Model)解析器不同,Pull解析器并不一次性加载整个XML文档到内存中,而是通过事件驱动的方式,当需要时逐个读取XML元素。这种方式使得程序可以更高效地处理大...

    Android利用pull生成xml文件

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

    android使用pull 解析xml文件源码

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

    android 解析XML文件 生成XML文件

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

    android xml pull解析示例

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

    android开发之xml文件操作——xml创建和pull解析xml

    本项目主要关注的是XML的创建和使用Pull解析器来解析XML,这是Android系统中处理XML数据的一种高效方法。接下来,我们将详细讨论这两个知识点。 首先,XML(Extensible Markup Language)是一种用于标记数据的语言...

    android之Pull解析XML文件

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

    在android中使用pull解析xml文件

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

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

    本文将深入探讨这两种解析技术,并介绍如何同时使用它们来生成XML文件。 **SAX解析器**: SAX(Simple API for XML)是一种基于事件的解析器,它在读取XML文档时触发一系列事件,如开始元素、结束元素、字符数据等...

    pull解析器的使用

    本文将详细介绍如何使用Pull解析器来处理XML数据,并结合Junit进行测试,确保解析和生成XML文件的正确性。 首先,让我们理解什么是Pull解析器。与DOM(Document Object Model)和SAX(Simple API for XML)不同,...

Global site tag (gtag.js) - Google Analytics