android pull 解析xml

2023-11-16

Pull简介

   1.常见的XML解析方式有三种,DOM、SAX、Pull,Android系统中推荐使用Pull

   2.Pull解析器是一个开源的Java项目,Android系统内部解析XML文件均为此种方式,也可用于JavaEE项目

   3.Android SDK中已经集成了Pull解析器,无需添加任何jar文件

   4.Pull解析器运行方式与SAX类似,提供各种事件的判断

   5.官方网站:http://xmlpull.org/

使用Pull解析器解析XML文件

  1.  Xml.newPullParser() 获得解析器

  2  parser.setInput(in, "UTF-8") 设置输入流以及编码

  3. parser.next() 获取下一个解析事件,得到一个事件代码

  4. XmlPullParser中定义了常量来标识各种解析事件

      START_DOCUMENT、END_DOCUMENT 、START_TAG 、END_TAG 、TEXT


1.使用pull解析xml

person.xml文件,需要解析的源文件

<?xml version="1.0" encoding="UTF-8"?>
<persons>
    <person id="20">
        <name>zizhu</name>
        <age>20</age>
    </person>
    <person id="30">
        <name>zizhu5</name>
        <age>22</age>
    </person>
</persons>
解析代码:

/**
	 * @param is 输入流
	 * @return 
	 * @throws Exception
	 */
	public List<Person> getPersons(InputStream is) throws Exception{
		List<Person> persons = null;
		Person person = null;
		XmlPullParser pullParse = Xml.newPullParser();//google自带的工具栏生成pullParse,由于android本身集成了pull解析器
		pullParse.setInput(is, "UTF-8");
		int event = pullParse.getEventType();//pull解析器通过事件触发,start document事件需要通过这个方法获得
		while(event != XmlPullParser.END_DOCUMENT){
			switch (event) {
			case XmlPullParser.START_TAG://开始标签
				if("persons".equals(pullParse.getName())){//匹配标签
					persons = new ArrayList<Person>();//初始化
				}
				if("person".equals(pullParse.getName())){
					person = new Person();
					int id = Integer.parseInt(pullParse.getAttributeValue(0));
					person.setId(id);
				}
				if("name".equals(pullParse.getName())){
					String name = pullParse.nextText();//得到标签里面的文本值
					person.setName(name);
				}
				if("age".equals(pullParse.getName())){
					int age = Integer.parseInt(pullParse.nextText());
					person.setAge(age);
				}
				break;
			case XmlPullParser.END_TAG:
				if("person".equals(pullParse.getName())){
					persons.add(person);
					person = null;
				}
				break;
			}
			event = pullParse.next();
		}
		return persons;
	}

2.将数据保存到xml格式的数据

/**
	 * 将数据存成xml格式的数据
	 * @param persons 
	 * @param os 输出流
	 * @throws Exception
	 */
	public void save(List<Person> persons , OutputStream os ) throws Exception{
		XmlSerializer serial = Xml.newSerializer();
		serial.setOutput(os, "UTF-8");
		//xml文档开始
		serial.startDocument("UTF-8", true);//第一个参数是编码,第二个参数表示此xml文件是否能单独存在
		serial.startTag(null, "persons");//根节点
		for(Person person : persons){
			serial.startTag(null, "person");
			serial.attribute(null, "id", person.getId() + "");
			
			//name标签
			serial.startTag(null, "name");
			serial.text(person.getName());
			serial.endTag(null, "name");
			
			//age标签
			serial.startTag(null, "age");
			serial.text(person.getAge() + "");
			serial.endTag(null, "age");
			
			serial.endTag(null, "person");
		}
		serial.endTag(null, "persons");
		serial.endDocument();
		os.flush();
	}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android pull 解析xml 的相关文章

  • 相当于Android中的javax.swing.Timer

    有没有类似的东西javax swing Timer在安卓上 我知道如何创建自己的线程 但是有类似摆动计时器的东西吗 您可能正在寻找课程android os CountDownTimer http developer android com
  • 为网络和/或持久存储序列化 Android Bundle?

    我需要序列化一个全面的应用程序 游戏 状态 以便通过网络传输或保存到磁盘并在以后检索 当然 捆绑包用于在多个用例中保存 恢复状态 因此使用它们将是理想的选择 但是 由于某种原因 Bundle 不可序列化 寻找解决方案只发现了将 Bundle
  • 如何在 android-studio 0.3.6 中运行 Gradle 1.9?

    我只是花了一些时间尝试将现有的 android studio 项目从 gradle 1 8 迁移到 gradle 1 9 Final 昨天发布 但失败了19th Nov 我在这里阅读了大多数其他与 gradle 相关的帖子 但没有一个对我有
  • 明文 HTTP 流量...不允许

    我的程序从用户那里获取一个 URL 因此它可以向互联网上的任何网站发出请求 我试图让这成为可能 我查找了有关 Android HTTP Cleartext 错误的所有答案 并做了这个 但它仍然不允许我连接我的测试本地 PHP 服务器 我在这
  • 如何在Firebase Android应用程序中分离两个不同的用户?

    我有一个应用程序 有两种不同类型的用户 一种是教师 第二种是普通用户 如果普通会员登录 他会去normal memberActivity如果他是教师会员 他会去Teacher memberActivity 我如何在登录活动中执行此操作 我的
  • 带有 Null 的 Soap WSDL

    我需要在函数中指定一个可为空的参数 这不起作用
  • Android接收通知打开和取消事件

    我从 webService 接收数据以生成自定义通知 我想追踪Intent要知道open 点击 或cancel 滑动 通知上的事件 以报告服务器进行分析 有没有听众onIntentStart or onIntentCanceled 也许是通
  • ImageButton 拉伸背景图像

    我正在尝试创建一个没有边框的 ImageButton 但遇到了图像按钮大小的问题 我使用 Eclipse ADT 将 ImageButton 拖到布局中并选择背景图像 图像按钮显示如下 正如您所看到的 背景图像和图像按钮周边之间有一个边框
  • Android - 内容值覆盖现有行

    我正在尝试使用插入值ContentValues 我已将 5 个值插入到 5 列中 运行应用程序后 我只有最后一组值的行ContentValues 前四组未插入 ContentValues cv new ContentValues cv pu
  • Android框架结构与MFC/Win32结构的比较?

    我为 Android 和 Windows 进行开发 使用 MFC 有时使用 win32 昨天我随意比较了这两个框架 它们显然非常非常不同 因此 Windows 开发与 Android 开发有很大不同 我想知道人们认为 Android 这样的
  • Android 将菜单项在操作栏中向左对齐

    我的应用程序中有一个操作栏 它显示我定义的菜单项res menu activity main xml 我的菜单项在操作栏上向右对齐 我希望它们左对齐 我为此找到的唯一解决方案使用了自定义操作栏 如下所示 将菜单项放置在 Honeycomb
  • MPAndroidChart:组合图表

    我在用MPAndroidChart 库 https github com PhilJay MPAndroidChart 我想用CombinedChart创建这样的图表 那可能吗 我尝试了一下 但似乎不起作用 因为 这些条目没有按我的预期工作
  • 从 AlertDialog 返回值

    我想构建一个函数来创建 AlertDialog 并返回用户输入的字符串 这是我用于创建对话框的函数 如何返回该值 String m Text private String openDialog String title AlertDialo
  • 在 Android SDK 中通过单击按钮更改背景颜色不起作用

    我有一个简单的程序 可以在单击按钮后更改背景颜色 但它不起作用 public class ChangeBackgroundActivity extends Activity Called when the activity is first
  • Exif 方向标签返回 0

    我正在开发一个自定义相机应用程序 我面临以下问题 当我尝试使用检索方向时ExifInterface 它总是返回 0 ORIENTATION UNDEFINED 这使我无法将图像旋转到正确的状态 从而无法正确显示 我使用示例代码来设置相机旋转
  • TYPE_ACCELEROMETER 和 TYPE_LINEAR_ACCELERATION 传感器有什么区别?

    I think TYPE ACCELEROMETER显示设备加速 但是 我不明白什么时候应该使用TYPE LINEAR ACCELERATION 我需要计算移动设备的速度 哪种传感器适合此应用 另外 我读到TYPE LINEAR ACCEL
  • SambaFileInputStream 和 FileInputStream 有什么不同?

    我需要从 samba 服务器流式传输视频 并且我使用 nanohttpd 在我的项目中创建简单的服务器 当我使用本地文件中的 fileinputstream 时 视频视图可以按设置播放视频 http localhost 8080 publi
  • 为什么 Perl 6 的 try 不处理 shell() 中的非零退出?

    This try https docs raku org language exceptions index entry try blocks try捕获异常 try die X AdHoc say Got to the end 输出显示程
  • android-如何在谷歌地图上将标记的位置显示为地址

    我已经尝试过 commonsware googlemapsv2 教程 特别是在地图上拖动标记 但现在另一个问题困扰着我 问题是如何将标记的当前位置显示为地图下方或上方的地址 字符串 这是我使用的代码 public class MainAct
  • 将 firebase 消息传递添加到 flutter android 项目时出现依赖错误

    我已将 firebase 消息传递添加到我的 Flutter 项目中 在 iOS 上运行良好 在 Android 上运行时出现错误 Android dependency androidx localbroadcastmanager loca

随机推荐

  • SSE2 Intrinsics各函数介绍

    SIMD相关头文件包括 include
  • PowerDesigner设计数据库表

    1 说明 使用PowerDesigner设计数据库表 然后将表设计导出为Word文档 以及MySQL数据库对应的DDL刷库脚本 2 创建模型 首先创建概念数据模型 File gt New Model gt 选择左边的Model types
  • [Swift]错误提示:Method does not override any method from its superclass

    微信公众号 山青咏芝 shanqingyongzhi 博客园地址 山青咏芝 https www cnblogs com strengthen GitHub地址 https github com strengthen LeetCode 原文地
  • Vue 入门教程

    vue 入门 常用指令 生命周期 业务 使用 Vue 简化查询 业务 vue 实现新增 vue 核心 MVVM Model View ViewModel 实现数据的双向绑定 把编程的关注点放在数据上 入门 引入 js 文件 在 JS 代码区
  • 由《羊了个羊》想到的高并发架构之路

    前言 要说最近一段时间最火的话题是什么 那必定是 羊了个羊 频频冲上微博热搜第一 因访问量骤增 大量玩家涌入进来 高并发流量导致游戏服务器被接连击穿 羊了个羊 服务器几天内就出现了多次异常 无法登录游戏 问题思考 我想这其中多次崩溃的原因可
  • jackson-databind 简介、中文文档、中英对照文档 下载

    jackson databind 文档 下载链接 含jar包 源码 pom 组件名称 中文 文档 下载链接 中英对照 文档 下载链接 jackson databind 2 10 0 jar jackson databind 2 10 0 A
  • 修改手机屏幕刷新率_手机屏幕刷新率那点事儿!

    屏幕刷新率是指电子束对屏幕上的图像重新扫描的次数 刷新率越高 显示的画面稳定性就会越好 眼睛也就不会累 屏幕有刷新率 我们的眼睛也有刷新率 所谓的人眼刷新率就是我们眼睛一秒看到的图像数量 到目前为止我们眼睛刷新率极限还没有确定的数字 一般飞
  • 华为OD机试真题-分奖金【2023.Q1】

    题目内容 公司老板做了一笔大生意 想要给每位员工分配一些奖金 想通过游戏的方式来决定每个人分多少钱 按照员工的工号顺序 每个人随机抽取一个数字 按照工号的顺序往后排列 遇到第一个数字比自己数字大的 那么 前面的员工就可以获得 距离数字差值
  • RC522 - NFC刷卡模块

    RC522 NFC刷卡模块 芯片介绍 引脚介绍 MF RC522 是应用于 13 56MHz 非接触式通信中高集成度读写卡系列芯片中的一员 是 NXP 公司针对 三表 应用推出的一款低电压 低成本 体积小的非接触式读写卡芯片 是智能仪表和便
  • 数据可视化分析之热门旅游景区数据分析

    背景介绍 对景区的数据分析可以判断热门景区的走向和趋势 从而帮助更好的决定去哪里游玩 具有一定的指导意义 景区数据分析 这里直接展示数据分析的结果 首先展示了数据的原始信息 然后 使用了pyecharts来进行数据可视化分析 得到相关的结果
  • Java 4-6、优化启动配置,properties改为yml

    优化启动配置 properties改为yml yml缩进严格 把之前的配置转换为yml的文件重写一下 一 application yml 环境配置 dev和prod spring profiles active dev 一 applicat
  • 数学建模:评价性模型学习——灰色关联分析法(GRA模型)

    目录 前言 一 灰色关联分析 1 什么是灰色关联分析 2 流程介绍 二 综合评价 1 数据无量纲化处理 2 确定参考序列 3 确定权重 4 计算灰色关联系数 5 计算灰色加权关联度 6 代码 总结 前言 继续学习数学建模涉及的评价性模型 这
  • 做个mp3播放器mciSendString()用法【转】

    做个mp3播放器 用realplay和WMP做出来的程序内存占用太大 如果你仅仅是播放MP3 建议使用API函数mciSendString 我把该函数的详细资料罗列如下供你参考 Option ExplicitPrivate Declare
  • PCB包地与串扰,工程界常常使用保护地线进行隔离,来抑制信号间的相互干扰,保护地线有时能够提高信号间的隔离度

    包地与串扰 硬件工程师炼成之路 工程界常常使用保护地线进行隔离 来抑制信号间的相互干扰 的确 保护地线有时能够提高信号间的隔离度 但是保护地线并不是总是有效的 有时甚至反而会使干扰更加恶化 使用保护地线必须根据实际情况仔细分析 并认真处理
  • Java多线程代码编写

    Java多线程代码编写 什么是多线程 并发和并行 并行 指两个或多个时间在同一时刻发生 同时发生 并发 指两个或多个事件在一个时间段内发生 在操作系统中 安装了多个程序 并发指的是在一段时间内宏观上有多个程序同时运行 这在单 CPU 系统中
  • java timestamp是什么类型_Java中Date和Timestamp的区别

    在java语言中 使用Date包为java util Date Date表示特定的瞬间 精确到毫秒 Timestamp此类型由 java util Date 和单独的毫微秒值组成 只有整数秒才会存储在 java util Date 组件中
  • Vue3中使用component :is 加载组件

    1 不使用setup语法糖 这种方式和vue2差不多 is可以是个字符串
  • Pentaho 社区版 5.2 安装配置

    Pentaho安装配置 一 系统配置 1 Windows环境 试验环境为Windows 7 专业版 需要安装配置JDK 试验环境为1 7 0 67 打开计算机 系统属性 高级系统设置 环境变量 新建系统变量Path JAVA HOME bi
  • 基于python多光谱遥感数据处理、图像分类、定量评估及机器学习方法应用

    普通数码相机记录了红 绿 蓝三种波长的光 多光谱成像技术除了记录这三种波长光之外 还可以记录其他波长 例如 近红外 热红外等 光的信息 与昂贵 不易获取的高光谱 高空间分辨率卫星数据相比 中等分辨率的多光谱卫星数据可以免费下载获取 例如 l
  • android pull 解析xml

    Pull简介 1 常见的XML解析方式有三种 DOM SAX Pull Android系统中推荐使用Pull 2 Pull解析器是一个开源的Java项目 Android系统内部解析XML文件均为此种方式 也可用于JavaEE项目 3 And