Android采用Pull解析和生成xml文档

Pull解析和Sax解析很相似,都是轻量级的解析,在Android的内核中已经嵌入了Pull,所以我们不需要再添加第三方jar包来支持Pull。Pull解析和Sax解析不一样的地方有(1)pull读取xml文件后触发相应的事件调用方法返回的是数字(2)pull可以在程序中控制想解析到哪里就可以停止解析

有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器。

需要解析的xml文件如下
android.xml位置放在src目录下

<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="1">
<name>张三</name>
<age>20</age>
</person>
<person id="2">
<name>李四</name>
<age>30</age>
</person>
</persons>


将Person对象封装起来的bean为

package com.lamp.domain;

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



业务层解析代码如下

package com.lamp.service;

import java.io.IOException;
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.lamp.domain.Person;

public class PullPersonService {
public static String PERSON = "person";
public static String NAME = "name";
public static String AGE = "age";
public static String PERSONS = "persons";

//从xml文件中读取数据
public static List<Person> pullReadXml(InputStream is) throws Exception {
List<Person> personList = null;
Person person = null;
XmlPullParser parser = Xml.newPullParser();
parser.setInput(is, "UTF-8");
int eventCode = parser.getEventType();
while (eventCode != XmlPullParser.END_DOCUMENT) {
switch (eventCode) {
case XmlPullParser.START_DOCUMENT:
personList = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
//判断开始标签元素是否是person
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());
}if(AGE.equals(parser.getName())){
person.setAge(new Integer(parser.nextText()));
}
}
break;

case XmlPullParser.END_TAG:
if(PERSON.equals(parser.getName()) && person!=null){
personList.add(person);
person = null;
}
break;
}
//进入下一个元素并触发相应事件
eventCode = parser.next();
}
return personList;
}

//将数据写入xml文件
public static void writeToXml(List<Person> personList,Writer writer) throws Exception, IllegalStateException, IOException{
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(writer);
serializer.startDocument("UTF-8", true);
serializer.startTag(null, PERSONS);

for(Person person : personList){
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();
}
}



最后通过JUnit进行测试

package com.lamp.service;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;

import org.xml.sax.SAXException;

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

import com.lamp.domain.Person;

public class PersonServiceTest extends AndroidTestCase {
private static final String TAG = "PersonServiceTest";
//测试读取xml文件
public void testReadXML() throws Exception, SAXException, IOException{
InputStream is = PersonServiceTest.class.getClassLoader().getResourceAsStream("android.xml");
List<Person> persons = PullPersonService.pullReadXml(is);
for(Person person : persons){
Log.i(TAG, person.getName());
}
}

//测试写xml数据
public void testWriteToXml() throws Exception{
//写到手机中
//FileOutputStream os = this.getContext().openFileOutput("persons.xml", Context.MODE_PRIVATE);
//写到SDK卡中
FileOutputStream os = new FileOutputStream(new File(Environment.getExternalStorageDirectory(),"persons.xml"));
OutputStreamWriter writer = new OutputStreamWriter(os,"UTF-8");
BufferedWriter bufWriter = new BufferedWriter(writer);
List<Person> personList = new ArrayList<Person>();
personList.add(new Person(1,"张三",30));
personList.add(new Person(2,"李四",50));
personList.add(new Person(3,"王五",70));
PullPersonService.writeToXml(personList, bufWriter);
}
}

基于Matlab生成并可视化多架飞机轨迹仿真(附源码) 这使我们可以轻松地对直线和恒定转弯进行建模,并具有额外的自由度,可以在直线段和曲线段之间平滑过渡。同样,空气中的物体会经历重力的影响,遵循抛物线(二次)路径。需要更多的航点来适应这些变化,但是轨迹的其余部分需要更少的点。第三个轨迹,如下所示,代表了一架速度更高的飞机。它由两个恒定的转弯组成,飞机在第二个转弯的中间减速。一旦知道(并设置了)物体穿过空间的物理路径,物体的速度作为行进距离的函数就通过三次埃尔米特插值来确定。在此示例中,学习了内部使用的插值符背后的概念,并展示了如何使用少量航点重现场景。 阅读详情

相关推荐

基于VUE的智慧园区可视化平台(开题报告+源码)

本系统(程序源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景: 随着城市化进程的加速,园区作为城市发展的重要组成部分,其管理和运营效率直接影响到城市的经济发展和居民生活质量。传统的园区管理方式已经难以满足现代城市对于高效率、智能化的需求。因此,利用先进的信息技术构建一个智慧园区可视化平台显得尤为重要。Vue.js作为一个高效的前端框架,能够帮助开发一个动态的、用户友好的智慧园区可视化平台,实现园区管理的数字化和智能化。

liu10611的博客 1179

Android之PULL解析XML

今天我们一起通过一个小例子来学习一下使用PULL解析器解析XML文件。 (1)首先我们放一个文件名为beauties.xml的XML文件到assets目录下,文件内容如下: 范冰冰 28 杨幂 23 然后在src目录下写一个与XML中

bear_huangzhen的专栏 2万+

新手必看:如何用T265和ROS实现无人机室内精准定位(附PX4参数配置)

本文详细介绍了如何使用Intel Realsense T265和ROS实现无人机室内精准定位,包括硬件准备、ROS数据流架构设计、PX4参数配置及系统验证。特别针对视觉SLAM技术在室内环境中的应用,提供了从零搭建到进阶优化的全流程解析,适合无人机开发新手快速上手。

weixin_30642561的博客 404

Xml 格式数据的生成和解析

什么是XMLXML全称为Extensible Markup Language, 意思是可扩展的标记语言,它是 SGML(标准通用标记语言)的一个子集。XML语法上和HTML比较相似,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的。W3C在1998年2月发布1.0版本; W3C在2004年2月发布1.1版本,但因为1.1版本不能向下兼容1.0版本,所以1.1没有人用。同时,在2004

JackChan 2万+

高通thermal-engine.conf配置详解:从虚拟传感器到CPU频率控制的完整指南

本文深入解析了高通thermal-engine.conf配置文件的架构与调优方法。从虚拟传感器的加权融合原理,到监控算法与CPU频率控制的多级策略,提供了完整的配置详解与实战调试指南。文章旨在帮助开发者与高级用户掌握底层温控逻辑,在性能与散热间实现精准平衡,并详细介绍了日志调试与场景化配置等高级技巧。

weixin_28327051的博客 493

ADS 2023 实战:手把手教你仿真一个中心频率 2.4GHz 的带通滤波器(附工程文件)

本文详细介绍了使用ADS 2023软件设计和仿真中心频率2.4GHz带通滤波器的全流程,包括工程准备、指标定义、原理图设计、仿真优化及实际电路实现。通过切比雪夫滤波器拓扑和参数优化,实现高性能的带通滤波器设计,适用于无线通信系统。附有工程文件和常见问题解决方案,助力工程师快速掌握射频滤波器设计技巧。

weixin_30790841的博客 481

Android XML解析学习——Pull方式

一.基础知识通过前面的学习我们已经知道了Android上使用SAX和DOM方式解析XML的方法,并且对两种做了简单的比较,通过比较我们知道对在往往内存比较稀缺的移动设备上运行的Android系统来说,SAX是一种比较合适的XML解析方式。但是SAX方式的特点是需要解析完整个文档才会返回,如果在一个XML文档中我们只需要前面一部分数据,但是使用SAX方式还是会对整个文档进行解析,尽管XML文档中后面的大部分数据我们其实都不需要解析,因此这样实际上就浪费了处理资源。就以USGS的地震数据为例,USGS网上的这个

ichliebephone的专栏 2万+

利用VBA宏实现LightTools仿真数据自动化导出至Excel

本文详细介绍了如何利用VBA宏实现LightTools仿真数据自动化导出至Excel的完整流程。通过调用LTAPI接口,工程师可以自动执行仿真、抓取照度与光强等数值数据、捕获并粘贴仿真图像,从而将重复性工作自动化,显著提升光学设计工作的效率和准确性。

weixin_28314575的博客 499

XML PULL解析

Pull和Sax类似,都是基于流(stream)操作文件,然后根据节点事件回调开发者编写的处理程序。因为是基于流的处理,因此Pull和Sax都比较节约内存资源,不会象Dom那样要把所有节点以对橡树的形式展现在内存中。 但Pull比Sax更简明,而且不需要扫描完整个流。          他们的区别为:SAX解析器的工作方式是自动将事件推入注册的事件处理器进行处理,因此你不能控制事件的处理

Caesardadi的专栏 1万+

利用 HTML5 与 SICF 打造 CRM WebClient UI 多附件上传 —— 从原型到生产的全流程揭秘

通过HTML5 标准 + SICF 服务 + BOL/GOS API的三位一体方案,我们无需修改 SAP 标准代码,就能让 CRM WebClient UI 获得现代化的多附件上传体验。浏览器负责多选与进度提示,SICF 负责安全中转,ABAP 负责权限校验与落库。你可以先在质量系统快速原型,再逐步完善权限、异常处理与 UI 细节。按照本文的方法落地,哪怕一次上传几百份文件,也能轻松搞定,真正把时间还给业务。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 334

【局部规划模块轨迹优化算法】EM_planner最大期望滚动优化算法

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对EM_planner最大期望滚动优化算法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 760

Android开发入门之采用Pull解析器解析和生成XML内容

Pull简介 常见的XML解析方式有三种,DOM,SAX,Pull,Android系统中推荐使用Pull Pull解析器是一个开源的Java项目,Android系统内部解析XML文件均为此种方式,也可用于J2EE项目 Android SDK中已经集成了Pull解析器,无需添加任何jar文件 Pull解析器运行方式与SAX类似,提供各种事件的判断 官方网站:http://xmlpull.o

leigo 1002

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

XML解析(三),PULL解析XML

昨天写了【XML解析(一)】SAX解析XML 和【XML解析(二)】DOM解析XML两篇文章,有兴趣的朋友可以去看一下,今天我们来学习一下PULL解析XML,刚好可以跟SAX和DOC解析XML的两种方式对比学习,其实Android里面解析XML最常用的也就这三种,而这三种并不一定拘泥于Android开发,同样也可以用在J2EE开发中,下面我们进入本篇文章的学习。一、概述 PULL?,拉?,肯定不是什

宿罪的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android之Pull解析XML

一.Pull解析方法介绍   除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件。Pull解析器的运行方式与SAX解析器相似。它也是事件触发的。Pull解析方式让应用程序完全控制文档该怎么样被解析。比如开始和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。通过Parser.getEventType()方法来取得事件的代...

NJU phd 在读。 641

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android开发笔记之PULL解析xml文件

在android开发中,经常用到去解析xml文件。我们今天来学习一下XML文件的解析,在java中我们应该知道两种解析方式:DOM和SAX解析方式,我这里就不讲解DOM和SAX的解析方式了,有兴趣的同学可以向我要示例或者自己上网查查,这里重点讲解一下Android中常用并且官方推荐的方式:PULL解析方式PULL解析方式采用事件驱动进行解析的,当pull解析器,开始解析之后,我们可以调用它的next

minigeek的博客 4776

android 使用pull生成xml

有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,在android等移动设备上推荐大家使用Pu

com360的专栏 1156

android之Xml的高效解析方式——pull

我们知道,解析XML在各个平台使用也非常广泛,android也是一样,经常会涉及到XML的解析读取,解析方式主要有三种:SAX解析器、DOM解析器和PULL解析器。 SAX解析器:它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的,也就是ContentHandler为重要核心,解析过程中每遇到一个事件源,只有调用事件解析器才能得到相应的处理;不过它的优点主要是解析速度快,占用内存少。

尹人入胜的博客 1万+

android 对xml文件的pull解析,生成xml ,对xml文件的增删

xml知识补充: 在xml文件中, 称为 start document ,即xml起始位置,最末尾为 end document ,即为xml结束,每一个为starttag,而为endtag         每个节点都可以有属性,,则id为attribute name,而1 为attribute value 节点也可以包含内容,    Tom, Tom就是内容,即text pull解析:

Jamsm的博客 1146

Android XML数据解析——pull技术

Android 使用pull的技术解析XML 1、我们可以使用java自带的PULL来解析XML文件(不是JDK自带的,需要导入包) 2、PULL解析器的运行方式和SAX解析器很相似,它提供了类似的事件,比如开始元素和结束元素,使用parser.next()可以进行下一个元素并且触发相应的事件,事件将作为代码被发送,因此可以使用一个switch来对事件进行选择,然后进行相应的处理。当开始解析元

mutoujian126的专栏 725

Android Xml生成和解析

【Android Xml生成和解析】 拼接字符串方式生成 Xml 文件 MainActivity.java 代码片段 public void click1(View view) throws Exception { StringBuilder sb = new StringBuilder(); sb.append(""); sb.append("");

moira33的博客 1664

安卓使用DOM,SAX,PULL解析xml,安卓写入xml文件

Xml简介 对Xml不太了解的同学可以看一下这篇Xml的简介:http://www.cnblogs.com/SkySoot/archive/2012/08/24/2654319.html DOM解析Xml Dom解析Xml的时候,会将Xml文件的所有内容以文件树的形式存储到内存中,然后用户通过使用DOM API遍历Xml树,检索需要的内容。 但是,因为它将文件树放在了内存中,如果文件较大的

YanRu的专栏 934

采用Pull解析器生成XML内容

采用Pull解析器生成XML内容 在Android已经集成进了Pull解析器,所以无需添加任何jar文件 Android系统本身用到的xml,其内部也是采用Pull解析器进行解析的。 下面是一个xml文件, 是要以这个xml结构生成xml的内容: liming 30 zhangxiaoxiao 25 写

xingbao1的博客 489

我的android 第10天 - pull解析Xml文档

XML文件是非常重要的数据格式,它可以用来作配置文件,存储数据等,Android中可以通过SAX、DOM、PULL来解析,Android默认的是通过Pull解析, Android内部的xml是通过pull解析,我们首选pull解析xml文档  一、用PULL解析和生成XML文件  1.解析XML文件  * 事件类型:   - START_DOCUMENT : 开始文档

u012458883的专栏 697

Android 中使用Pull解析XML文件

一、首先先看XML文件结构内容: 张三 30 李四 40 很简单,XML文件有两个对象信息。OK!下面我们就来看看在Android开发中,怎样去解析这个XML文件,并且拿到里面的值显示到UI上。 二、XML的解析方式有很多种,比如:DOM解析、SAX解析、Pull解析等等... 在这里我就不做详细解释了。下面我

追梦人的专栏 994

Android安卓使用pull方式解析xml

Android安卓使用pull方式解析xml 主要类 importorg.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserFactory; 主要代码 网络获取Xml字符串可以通过http从服务器获取,获取xml字符串可参考 https://blog.youkuaiyun.com/qq_37196621/article/details/109300850 https://blog.youkuaiyun.com/qq_37196621/article/de.

qq_37196621的博客 263
上一篇: Android SAX解析xml文件
下一篇: Flex之数据模型代理
lk231_java
博客等级 码龄15年 0粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值