- 浏览: 3481312 次
- 性别:
- 来自: China
-
文章分类
- 全部博客 (536)
- ajax (1)
- Algorithm (14)
- Android (40)
- CSS/HTML... (2)
- defy (3)
- DesignPattern (2)
- dorado (0)
- Drools (6)
- English/日本語 (7)
- Flex (2)
- Framework (0)
- Google (3)
- hibernate (13)
- homework (3)
- HTML5 (0)
- IDE (29)
- java (45)
- javaee (7)
- Javascript (14)
- java组件 (5)
- jQuery (4)
- jsp (8)
- jsf (2)
- Linux (2)
- lucene (0)
- mysql (6)
- news (3)
- Oracle (8)
- other (4)
- PHP (5)
- Python (0)
- Software Engineering (3)
- spring (7)
- struts1.x (14)
- struts2.x (14)
- strolling in cloud (1)
- subject:javaEnhance (20)
- Tomcat (7)
- validator (3)
- 学习·方法·心得 (8)
- .NET (2)
- vba (6)
- groovy (5)
- grails (2)
- SWT (0)
- big data (1)
- perl (1)
- objective-c (50)
- product (1)
- mac (7)
- ios (188)
- ios-phone (2)
- ios-system (15)
- ios-network (5)
- ios-file (4)
- ios-db (1)
- ios-media (3)
- ios-ui (27)
- ios-openSource (6)
- ios-animation (5)
- ios-drawing (7)
- c (2)
- ios-app (2)
- ios-course (15)
- ios-runtime (14)
- ios-code (8)
- ios-thread (8)
- ios-LBS (2)
- ios-issue (1)
- ios-design (2)
- Jailbreak (2)
- cocos2d (0)
- swift (16)
- ios-framework (4)
- apple watch (4)
- ios-web (1)
- react native (3)
- TVOS (1)
- OpenGL (1)
最新评论
-
xiaobinggg:
...
Session机制详解 -
菜鸟学生会:
Drools规则工作流引擎开发教程网盘地址:http://pa ...
Drools入门-----------环境搭建,分析Helloworld -
wangyudong:
不是很好用,不支持自动化测试RESTful API,也不支持自 ...
Simple REST Client POST使用方法 -
Paul0523:
很棒的一篇文章,感谢楼主分享
Session机制详解 -
啸笑天:
获取原型对象的三种方法<script>functi ...
复习JavaScript面向对象技术
Pull解析技术
除了可以使用 SAX和DOM解析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
发表评论
-
Android 桌面部件
2011-07-06 19:26 1897桌面部件是一种利用AppWidget框架将应用程序的某个部件放 ... -
Android 实时文件夹
2011-07-06 15:38 2888实时文件夹是一种用来显示由某个ContentProvider提 ... -
android 添加桌面快捷方式
2011-07-05 19:20 13350、在桌面创建快捷方式方法: 方法一:通过长按某一个应用程序的 ... -
Android权限详解
2011-07-04 09:43 2264在Android的设计中,资源的访问或者网络连接,要得到这 ... -
Android权限注解
2011-07-04 09:33 3517Android应用程序在使用很多功能的时候必须在Mainife ... -
ListView使用SimpleAdapter加载网络图片
2011-07-02 19:14 7739ListView是一种常见的布局,通过SimpleAdapte ... -
android:layout_gravity 和 android:gravity 的区别
2011-07-02 19:00 2130gravity 这个英文单词是重心的意思,在这里就表示 ... -
横竖屏切换时不销毁当前activity 和 锁定屏幕
2011-07-02 18:58 3655首先在Mainifest.xml的Activity元素 ... -
onSaveInstanceState和onRestoreInstanceState触发的时机
2011-07-02 17:49 2899当某个activity变得“容易”被系统销毁时,该ac ... -
strings.xml文件中提供占位符来格式化数据
2011-07-01 16:16 3270有些朋友可能会动态的修改Android中strings. ... -
ANDROID开机动画分析
2011-05-25 15:40 5946Android 2.0 开机动画文件分析。开机动画文件:boo ... -
Android专栏地址,真的不错啊!!!
2011-05-22 20:22 1680第三极: http://disanji.net/cate ... -
A1200入门DIY
2011-05-22 11:40 0A1200入门DIY 2007-04-16 19:33 ... -
android用户界面数据绑定
2011-05-19 21:25 5306当我们想用合适的方式显示并操作一些数据(如数组,链表,数据库等 ... -
emulator: ERROR: the user data image is used by another emulator. aborting
2011-05-19 13:48 2378今天早上起床,运行项目时报错:Error the use ... -
Android Map demo
2011-04-23 22:24 3425AndroidManifest.xml <?xm ... -
Android Map申请key
2011-04-23 22:02 31561. 首先先要获取你的debug keystore位置 ... -
conversion to dalvik format failed with error 1
2011-04-23 21:52 3490android低版本工程(如1.5)放到高版本环境中(如2.2 ... -
Android GPS基础
2011-04-20 22:14 2811package org.example.locationtes ... -
Android API:Activity.managedQuery()
2011-04-20 19:22 2650描述: 获取一个包含指定数据的 Cursor 对 ...
相关推荐
本文将深入探讨如何使用Pull解析器来解析和生成XML文件,特别关注Android环境下的应用。 ### Pull解析器概述 Pull解析器是一种事件驱动型的XML解析器,它允许开发者通过一系列的事件来读取和解析XML文档。与SAX...
XML Pull解析器在Android开发中广泛使用,尤其是在处理大型XML文件或实时数据流时,其效率和低内存占用是关键优势。掌握XML Pull解析和生成技术对于Android开发者来说是必备技能之一,能够提高应用的性能和用户体验...
在Android开发中,处理XML数据是一项常见的任务,而Android提供了内置的Pull解析器来高效地读取和生成XML文件。本文将详细介绍如何使用Pull解析器来操作XML。 首先,我们来理解什么是Pull解析器。Pull解析器是一种...
我们将讲解如何使用Pull解析器读取本地XML文件,并生成一个新的、格式不同的XML文件。 Pull解析是一种事件驱动的解析方法,它不像DOM解析那样将整个XML文档加载到内存中,而是按需逐个处理XML元素。这种方法节省了...
如果XML文件较小,结构复杂,或者需要频繁解析,PULL可能是更好的选择;反之,如果文件大且结构简单,SAX的效率和内存效率优势就显现出来。 为了更好地理解这两种解析方式,可以参考提供的博客文章...
本篇将深入探讨Android下Pull解析器的使用,以及如何利用它来解析和生成XML文件。 一、Android Pull解析器简介 Pull解析器是基于事件驱动的解析模型,它不保留整个XML文档的内存映像,而是按需读取和处理XML元素。...
XML(eXtensible Markup Language...总结,PULL解析器是Android开发中处理XML文件的一种高效手段,尤其适用于资源有限的移动环境。通过掌握其工作原理和使用方法,开发者可以更好地优化应用程序的性能,提高用户体验。
本文将详细介绍基于Pull解析器的XML解析生成工具类的实现,以及如何将XML文件转换为对象和将对象转换为XML文件。 1. **XML解析器的初始化** 在使用Pull解析器之前,首先需要通过`XmlPullParserFactory`工厂类创建`...
与SAX(Simple API for XML)和DOM(Document Object Model)解析器不同,Pull解析器并不一次性加载整个XML文档到内存中,而是通过事件驱动的方式,当需要时逐个读取XML元素。这种方式使得程序可以更高效地处理大...
"Android利用Pull生成XML文件"这一主题涉及到的是如何使用Android的Pull解析器来读取和生成XML内容。Pull解析器是一种轻量级、低级别的解析机制,与DOM(文档对象模型)和SAX(简单API for XML)解析器相比,它更...
pull解析xml文件,和sax和dom一样 都可以脱离android单独使用,pull和sax的原理一样,不一样的地方是pull读取xml文件后调用方法返回的是数字, 读取到xml的声明返回数字0 START_DOCUMENT; 读取到xml的结束返回数字1 ...
本案例将深入探讨如何使用Pull解析器读取和生成XML内容。 首先,理解XMLPullParser的工作原理至关重要。它通过移动到文档的不同事件(如START_TAG、END_TAG、TEXT等)来解析XML,这样开发者可以逐个处理元素,而不...
本文将深入探讨如何使用SAX、DOM和Pull解析器解析XML文件,以及如何生成XML文件。我们将同时展示Java和Kotlin两种语言的实现方法。 一、SAX解析XML文件 SAX(Simple API for XML)是一种事件驱动的解析器,它不会一...
在Android系统中,XML Pull解析是一种轻量级且高效的解析XML文档的方法,它允许应用程序按需读取XML文档的节点,而无需加载整个文档到内存中。以下是关于Android XML Pull解析的详细知识讲解。 1. **XML Pull解析器...
本文将深入探讨如何在Android中使用Pull解析器来处理XML文件,这是一种高效且节省资源的方式。 Pull解析器是Android提供的一个API,它允许应用程序通过事件驱动的方式解析XML文档。与SAX解析器类似,Pull解析器不...
本文将深入探讨如何在Android中使用Pull解析器解析XML文件。 一、XML Pull解析器简介 XML Pull解析器(XML Pull API)是一种基于事件驱动的解析模型,它不需预先加载整个XML文档,而是逐行读取,当遇到特定的XML...
本文将深入探讨这两种解析技术,并介绍如何同时使用它们来生成XML文件。 **SAX解析器**: SAX(Simple API for XML)是一种基于事件的解析器,它在读取XML文档时触发一系列事件,如开始元素、结束元素、字符数据等...
本文将详细介绍如何使用Pull解析器来处理XML数据,并结合Junit进行测试,确保解析和生成XML文件的正确性。 首先,让我们理解什么是Pull解析器。与DOM(Document Object Model)和SAX(Simple API for XML)不同,...
本文将深入探讨如何在Android中生成XML文件以及如何使用PULL解析器来解析XML数据。 首先,我们来看一下如何在Android中生成XML文件。生成XML文件通常涉及创建一个XMLWriter对象,然后通过调用其方法来添加元素、...