Android 中 解析 XML 文件的几种方式

在 Android 开发中,解析 XML 文件有多种方式,每种方式都有其特点和适用场景。常见的 XML 解析方式有 DOM 解析、SAX 解析 和 XmlPullParser 解析。

一、xml 文件及数据类

1、xml 文件

  • 将测试用 book.xml 文件放在项目的 app/src/main/assets 目录下,文件内容如下:
	<library><book><title>Android 开发</title><author>张三</author><price>54</price></book><book><title>Java 编程</title><author>李四</author><price>34</price></book><book><title>第一行代码</title><author>王五</author><price>76</price></book></library>

2、定义数据结构

  • 根据 book.xml 内容定义配套的数据类:
	data class BookModel(var title: String = "",var author: String = "",var price: String = "")

3、读取 xml 文件内容

  • 根据 xml 解析方式的需求,可以将 book.xml 文件读取为字符串格式或者 InputStream 格式:
    /*** 从 assets 目录下读取 xml 内容*/fun readXmlFromAsset(context: Context, fileName: String): String {var content = ""try {val inputStream = context.assets.open(fileName)val reader = inputStream.reader()reader.use {content = it.readText()}} catch (e: IOException) {e.printStackTrace()Log.d(TAG, "[readXmlFromAsset] read error.")}println(content)return content}// 读取为字符串格式val xmlContent = readXmlFromAsset(MyApplication.appContext, "book.xml")// 读取为 InputStream 格式val inputStream = MyApplication.appContext.assets.open("book.xml")

二、DOM 方式解析

DOM(Document Object Model)解析是一种基于树结构的解析方式,它会将整个 XML 文件加载到内存中,解析为一个树状的 DOM 对象。这种方式适合解析较小的 XML 文件,因为它可以随机访问和修改 XML 的任意部分。DOM解析的主要优点是操作灵活,可以方便地修改、查询和遍历文档。

1、解析基本步骤

  • 加载XML文档
    将整个XML文档加载到内存中。
  • 构建DOM树
    构建一个树状结构,表示XML文档的层次结构。
  • 操作DOM树
    通过DOM API访问、修改或查询DOM树中的节点。
  • 释放资源
    完成操作后,释放加载的DOM树,以节省内存。

2、示例代码

	/*** DOM 方式解析 XML 数据*/fun parseXmlByDOM(inputStream: InputStream): List<BookModel> {val bookList = mutableListOf<BookModel>()try {// 创建解析器val factory = DocumentBuilderFactory.newInstance()val builder = factory.newDocumentBuilder()// 解析 XML 文件val document = builder.parse(inputStream)// 规范化文档document.documentElement.normalize()// 获取根节点val rootName 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/88226.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python里的abc库是什么东西

Python 中的 ABC&#xff1a;为什么你需要抽象基类&#xff1f;告别“假鸭子”&#xff0c;拥抱真抽象&#xff01; 你是不是经常在 Python 项目中感到困惑&#xff1a;我定义了一个类&#xff0c;希望它能被其他类继承并实现某些特定功能&#xff0c;但又不想它被直接实例化&…

设计模式精讲 Day 9:装饰器模式(Decorator Pattern)

【设计模式精讲 Day 9】装饰器模式&#xff08;Decorator Pattern&#xff09; 文章内容 在软件开发中&#xff0c;灵活扩展功能是提升系统可维护性和可复用性的关键。装饰器模式作为一种结构型设计模式&#xff0c;为对象动态地添加职责&#xff0c;而无需通过继承来实现。它…

浏览器无法访问:Nginx下的基于域名的虚拟主机

检查步骤如下&#xff1a; 1、nginx -t &#xff0c;检查配置文件是否有语法错误 [root89 ~]# nginx -t nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok nginx: configuration file /opt/nginx/conf/nginx.conf test is successful # 可以看到 配置…

【appium】6.appium遇到的问题

1.appium-python-client 修改版本1.5 为5.1.1,后执行python程序时&#xff0c;提示&#xff1a; raise TypeError( TypeError: missing 1 required keyword-only argument: options (instance of driver options.Options class) 你遇到的错误&#xff1a; TypeError: missing…

C++法则3:使用拷贝和交换的赋值运算符自动就是异常安全的,且能正确处理自赋值。

C法则3&#xff1a;使用拷贝和交换的赋值运算符自动就是异常安全的&#xff0c;且能正确处理自赋值。 这条法则强调了使用"拷贝和交换"(Copy-and-Swap)惯用法来实现赋值运算符()的优点&#xff1a; 关键点 异常安全&#xff1a;拷贝和交换方法天然提供了强异常安全…

纯血HarmonyOS5 打造小游戏实践:扫雷(附源文件)

鸿蒙扫雷游戏的核心架构设计 鸿蒙OS扫雷游戏采用了MVC&#xff08;模型-视图-控制器&#xff09;的架构思想&#xff0c;将游戏逻辑与UI展示分离&#xff0c;使得代码结构清晰且易于维护。整个游戏由以下几个核心部分构成&#xff1a; 数据模型设计 游戏的基础数据模型是Cel…

Linux C语言的opendir如何获取目录下的隐藏文件

在 Linux 文件系统中&#xff0c;所谓隐藏文件是文件名以 . 开头的文件&#xff08;例如 .bashrc、.git、.config 等&#xff09;。 在编程层面&#xff0c;opendir readdir 并不会自动排除隐藏文件。 只要你不在代码中手动过滤&#xff0c;readdir 会把目录下所有文件&#…

母线槽接头过热隐患难防?在线测温方案实时守护电力安全

近年来&#xff0c;由于各种设备对电力的大力需求&#xff0c;并有逐年增加的趋势&#xff0c;传统电路接线方式在施工时越来越力不从心。系统一旦定型&#xff0c;后续想要简化变更更是难上加难。母线槽方案因此兴起&#xff0c;凭借多点连接&#xff08;接头、插接头、插接箱…

Windows本地部署wordpress

一、下载wordpress 地址&#xff1a;Download – WordPress.org 下载后解压出来 二、下载小皮面板 地址&#xff1a;Windows版phpstudy下载 - 小皮面板(phpstudy) 下载后安装 三、打开小皮面板&#xff0c;安装对应内置应用 1、MySQL8&#xff08;注意要是8版本,卸载其他版本…

Android 性能优化

一、Android中检测性能工具 Profiler —— 使用Profiler的CPU分析功能。 Method Tracing ———— 通过该方法,我们可以记录应用运行过程中的方法调用情况,包括每个方法的执行时间、调用次数等。 Systrace 是Android平台提供的一款工具,用于记录短期内的设备活动。 Systra…

图片压缩工具 | Electron应用配合 commander 提供命令行调用功能

OPEN-IMAGE-TINY&#xff0c;一个基于 Electron VUE3 的图片压缩工具&#xff0c;项目开源地址&#xff1a;https://github.com/0604hx/open-image-tiny 功能描述 应用程序的命令行调用功能允许用户通过终端&#xff08;如Windows的CMD/PowerShell或Linux/macOS的Terminal&am…

Linux》》Shell脚本 基本语法

执行脚本的三种方式 查找变量的过程 变量引用的顺序》》先从当前进程查询变量&#xff0c;如果当前进程没有此变量&#xff0c;默认去父进程查找这个变量。如果查找到则返回&#xff0c;否则一直查找到 祖宗&#xff08;PID为1&#xff09;&#xff0c;还没有&#xff0c;则就…

C#.VB.NET多线程,多用户下独立锁和全局锁的区别

以下代码,每个客户端都分配了一个锁吗? 用户WebSocket信息类Public Class UserWebSocketInfoPublic Property SessionID As StringPublic Property WebSocket As WebSocketPublic Property LastResponseTime As DateTimePublic Property PendingHeartbeatCount As IntegerPubl…

无人机加速器模块技术解析

一、加速器模块的运行方式 1. 传感器数据采集与融合 加速度计核心作用&#xff1a;测量三维线性加速度&#xff08;X/Y/Z轴&#xff09;&#xff0c;结合陀螺仪&#xff08;角速度&#xff09;和磁力计&#xff08;方向&#xff09;构成九轴姿态传感器&#xff0c;实时输出…

用html实现数字生命

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>数学粒子动画</title><style>body {mar…

SQLite3 在嵌入式系统中的应用指南

SQLite3 在嵌入式系统中的应用指南 一、嵌入式系统中 SQLite3 的优势 SQLite3 是嵌入式系统的理想数据库解决方案&#xff0c;具有以下核心优势&#xff1a; 特性嵌入式系统价值典型指标轻量级适合资源受限环境库大小&#xff1a;500-700KB零配置无需数据库管理员开箱即用无…

通义大模型与现有企业系统集成实战《CRM案例分析与安全最佳实践》

1. 集成架构设计 &#xff08;1&#xff09;混合部署架构演进 #mermaid-svg-eW4YPoU2fdbnT4xp {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-eW4YPoU2fdbnT4xp .error-icon{fill:#552222;}#mermaid-svg-eW4YPoU2f…

leetcode:746. 使用最小花费爬楼梯

学习要点 动态规划正着推动态规划倒着推理解递归在动态规划与纯递归的类比分析中体会两者各自的特点 题目链接 746. 使用最小花费爬楼梯 - 力扣&#xff08;LeetCode&#xff09; 题目描述 解法1&#xff1a;动态规划倒着推 // dp[i]--->从第i阶楼梯到达楼顶最小花费int…

汽车毫米波雷达增强感知:基于相干扩展和高级 IAA 的超分辨率距离和角度估计.

重庆西南大学毫米波雷达团队在IEEE Transactions on Consumer Electronics 上发表的一篇论文&#xff1a;《基于相干扩展和高级 IAA 的超分辨率距离和角度估计》。 本文深入研究了毫米波&#xff08;mmWave&#xff09;调频连续波雷达距离和角度的超分辨问题。首先&#xff0c;…

软件更新 | 从数据到模型,全面升级!TSMaster新版助力汽车研发新突破

为满足汽车电子开发领域日益增长的测试与仿真需求&#xff0c;TSMaster最新版本聚焦实车数据采集、MBD智能建模与新API扩展三大核心功能。无论您是进行车载网络测试、ECU开发还是自动化验证&#xff0c;新版本都能为您提供更高效、更可靠的解决方案&#xff01; TSMaster 2025.…