从零开始开发纯血鸿蒙应用之XML解析

news2025/5/13 1:00:32

从零开始开发纯血鸿蒙应用

  • 〇、前言
  • 一、鸿蒙SDK中的 XML API
    • 1、@ohos.xml
    • 2、@ohos.convertxml
  • 三、XML 解析实践
    • 1、源数据结构
    • 2、定义映射关系
    • 3、定义接收对象
    • 4、获取文章信息
  • 四、总结

〇、前言

在前后端的数据传输方面,论格式化形式,JSON格式自然是首选,然而,曾经风靡一时的XML格式,也并非全然退出舞台,至今仍然发挥着作用,比如,RSS订阅中。

对于,JSON 格式的数据,ArkTS 因为是拓展自 Typescript,也就是 Javascript 的缘故,处理起来自然没什么难度,倒是 XML 格式的处理起来比较难,不过,鸿蒙SDK 对 XML 格式的数据,并不是全然不支持,提供了相应的 API,下面就给大家介绍一下。

一、鸿蒙SDK中的 XML API

在鸿蒙SDK中,可用于 XML 文档处理的 API,主要有两个:

  • @ohos.xml:XML 解析与生成
  • @ohos.convertxml:XML 转换 Javascript

1、@ohos.xml

在该模块,共包含一下几个与XML文档相关的对象:

  • XmlSerializer:用于生成 XML 文档
  • XmlPullParser:用于解析 XML 文档
  • ParseOptions:XML 解析选项
  • ParseInfo:XML 解析信息
  • EventType:XML 标签事件类型

其中用于 XML 解析的接口,自然就是 XmlPullParser 接口,具体而言,就是XmlPullParser.parseXml(option: ParseOptions): void 方法,而 ParseOptions 由如下成员组成:
在这里插入图片描述XML 文档中的数据,并不会由 parseXml 方法返回,而是在 ParseOptions 中传入的三个回调函数中获取:
作为关键的 tagValueCallbackFunction,可用于解析 XML 标签,返回 true 表示向下一层解析,返回 false 表示不再继续解析,可用于读取标签名称,特别的,如标签内的文本不会通过 value 返回,而是当作标签名为空的标签进行解析,以 CSDN 的 RSS 订阅返回的 XML 文档为例,利用该方法解析出来的信息如下:
在这里插入图片描述所以,很鸡肋,想要用这个方法去获取 XML 格式封装的数据,需要费很大的周折。因此,我不建议在鸿蒙应用中,用这种方式去解析 XML 并获取数据。

2、@ohos.convertxml

该模块相当简洁,一共就两个接口:ConvertXML 和 ConvertOptions,而 ConvertXML 下,目前就剩下一个官方还在维护的 fastConvertToJSObject(xml: string, options?: ConvertOptions) : Object 方法,而 ConvertOption 主要用于声明格式转换过程中使用映射关系:
在这里插入图片描述
最终会用指定映射关系,生成一个Javascript 对象,而 Javascript 对象在 ArkTS 中,读取数据就方便了,也因此,我首推大家用这个 API 去实现鸿蒙应用中的 XML 解析功能。

三、XML 解析实践

这里,直接以 CSDN 对外提供的 RSS 订阅为 XML 数据,使用 ConvertXML 接口进行解析实践。

1、源数据结构

首先,看一下 CSDN 的 RSS 订阅链接返回的 XML 数据的结构:
在这里插入图片描述如图所圈,在 channel 标签下的 item 标签封装了具体的文章信息,如文章标题、文章链接和文章简介等,而这也是我们订阅 RSS 所需要的核心数据,所以,就需要将里面的所有 item 标签中的文章信息读取出来。

2、定义映射关系

为了将 XML 数据转换 Javascript 对象数据,需要定一个 ConvertXML.fastConvertToJSObject 方法所需的键值映射关系:

let options: convertxml.ConvertOptions = {
 trim: false,
 declarationKey: "_declaration",
 instructionKey: "_instruction",
 attributesKey: "_attributes",
 textKey: "_text",
 cdataKey: "_cdata",
 doctypeKey: "_doctype",
 commentKey: "_comment",
 parentKey: "_parent",
 typeKey: "_type",
 nameKey: "_name",
 elementsKey: "_elements"
}

3、定义接收对象

ConvertXML.fastConvertToJSObject 方法会将 XML 数据转换成 Javascript 对象,然而, ArkTS 语法现在不允许用 data['key'] 形式去读取对象字段,只能用 object.field 的方式读取,所以,就需要根据 ConvertXML.fastConvertToJSObject 生成的对象数据结构:
在这里插入图片描述去定义一个对应的ArkTS 类:
在这里插入图片描述有了这个 XMLModel,那么就可以直接用语句 const xml: XMLModel = conv.fastConvertToJSObject(strXML, options) as XMLModel; 保存转换结果。

4、获取文章信息

有了 XMLModel 去接受 fastConvertToJSObject 方法的转换结果,从中获取具体的文章信息就容易很多了,同样的,为了方便页面展示或者透传文章信息到其他页面,需要定义相应的 Model:

export class DocModel {
  title: string = "";
  link: string = "";
  author: string = "";
  pubDate: string = "";
  description: string = "";
}

而进一步解析 XMLModel 获取文章信息,则可以通过如下两个方法完成:
在这里插入图片描述在这里插入图片描述

四、总结

鸿蒙应用中使用 XML 格式的数据,关键还是在于将其转换成可直接使用的类对象,而这个转换过程,无需开发者自己实现,鸿蒙SDK中的 ConvertXML 接口早已提供相应能力,开发者只需关心转换之后的 Javascript 对象该如何定义,以及进一步解析后的数据如何封装和使用。

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

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

相关文章

10.王道_HTTP

1. 互联网时代的诞生 2. HTTP的基本特点 2.1客户端-服务端模型 2.2 无状态协议 2.3 可靠性 2.4 文本协议 3. HTML,CSS和JS 4. HTTP的各个组件 4.1 客户端 4.2 服务端 4.3 代理 5. URI和URL 6. HTTP报文 HTTP报文分为两种——请求报文和响应报文。 6.1 GET请求示例 注意&#…

解决stm32HAL库使用vscode打开,识别不到头文件及uint8_t等问题

解决stm32HAL库使用vscode打开,识别不到头文件及uint8_t等问题 结论,问题有2问题1问题2解决办法将Keil Assistant自动生成的.vscode目录复制到MDK-ARM上层目录将Keil Assistant自动生成的.vscode目录复制到MDK-ARM上层目录将Keil Assistant自动生成的.vs…

uniapp-商城-50-后台 商家信息(输入进行自定义规则验证)

本文介绍了如何在后台管理系统中添加和展示商家信息,包括商家logo、名称、电话、地址和介绍等内容,并支持后期上传营业许可等文件。通过使用uni-app的uni-forms组件,可以方便地实现表单的创建、校验和管理操作。文章详细说明了组件的引入、页…

网页版部署MySQL + Qwen3-0.5B + Flask + Dify 工作流部署指南

1. 安装MySQL和PyMySQL 安装MySQL # 在Ubuntu/Debian上安装 sudo apt update sudo apt install mysql-server sudo mysql_secure_installation# 启动MySQL服务 sudo systemctl start mysql sudo systemctl enable mysql 安装PyMySQL pip install pymysql 使用 apt 安装 My…

WEBSTORM前端 —— 第2章:CSS —— 第8节:网页制作2(小兔鲜儿)

目录 1.项目目录 2.SEO 三大标签 3.Favicon 图标 4.版心 5.快捷导航(shortcut) 6.头部(header) 7.底部(footer) 8.banner 9.banner – 圆点 10.新鲜好物(goods) 11.热门品牌(brand) 12.生鲜(fresh) 13.最新专题(topic) 1.项目目录 【xtx-pc】 ima…

仓储车间安全革命:AI叉车防撞装置系统如何化解操作风险

在现代物流体系中,仓储承担着货物储存、保管、分拣和配送等重要任务。但现代仓储行业的安全现状却不容乐观,诸多痛点严重制约着其发展,其中叉车作业的安全问题尤为突出。相关数据显示,全球范围内,每年因叉车事故导致的…

修改图像分辨率

在这个教程中,您将学习如何使用Python和深度学习技术来调整图像的分辨率。我们将从基础的图像处理技术开始,逐步深入到使用预训练的深度学习模型进行图像超分辨率处理。 一、常规修改方法 1. 安装Pillow库 首先,你需要确保你的Python环境中…

Redis 主从同步与对象模型(四)

目录 1.淘汰策略 1.1 expire/pexpire(设置键的过期时间) 1.2 配置 1.maxmemory 2.maxmemory-policy 3.maxmemory-samples 2.持久化 2.1背景 2.2 fork 的写时复制机制 2.3 大 key 3.持久化方式 3.1 aof(Apped Only File&#xff09…

Linux系列:如何用perf跟踪.NET程序的mmap泄露

一:背景 1. 讲故事 如何跟踪.NET程序的mmap泄露,这个问题困扰了我差不多一年的时间,即使在官方的github库中也找不到切实可行的方案,更多海外大佬只是推荐valgrind这款工具,但这款工具底层原理是利用模拟器&#xff…

如何租用服务器并通过ssh连接远程服务器终端

这里我使用的是智算云扉 没有打广告 但确实很便宜 还有二十小时免费额度 链接如下 注册之后 租用新实例 选择操作系统 选择显卡型号 点击租用 选择计费方式 选择镜像 如果跑深度学习的话 就选项目对应的torch版本 没有的话 就创建纯净的cuda 自己安装 点击创建实例 创建之后 …

华为设备链路聚合实验:网络工程实战指南

链路聚合就像为网络搭建 “并行高速路”,既能扩容带宽,又能保障链路冗余,超实用! 一、实验拓扑速览 图中两台交换机 LSW1 和 LSW2,PC1、PC2 归属 VLAN 10,PC3 归属 VLAN 30。LSW1 与 LSW2 通过 GE0/0/1、…

AUTOSAR图解==>AUTOSAR_TR_AIDesignPatternsCatalogue

AUTOSAR 人工智能设计模式目录 AUTOSAR传感器执行器与仲裁设计模式的深入解析与图解 目录 简介传感器和执行器模式 架构概述组件结构交互流程应用场景 多请求者或提供者之间的仲裁模式 架构概述组件结构仲裁流程应用场景 总结 1. 简介 AUTOSAR(AUTomotive Open Sy…

双系统电脑中如何把ubuntu装进外接移动固态硬盘

电脑:win11 ubuntu22.04 实体机 虚拟机:VMware17 镜像文件:ubuntu-22.04.4-desktop-amd64.iso 或者 ubuntu20.4的镜像 外接固态硬盘1个 一、首先win11中安装vmware17 具体安装方法,网上很多教程 二、磁盘分区 1.在笔…

【C语言】程序的预处理,#define详解

一、预定义符号 二、#define 1.#define定义标识符 #define + 自定义名称 + 代替的内容 例: #define MAX 100 #define CASE break;case #define CASE break;caseint main() {int n 0;switch (n){case 1:CASE 2:CASE 3:CASE 4:}return …

NVM完全指南:安装、配置与最佳实践

发布于 2025年5月7日 • 阅读时间:10分钟 💡 TL;DR: 本文详细介绍了如何完整卸载旧版Node.js,安装NVM,配置阿里云镜像源,以及设置node_global与node_cache目录,打造高效Node.js开发环境。 📋 目…

(二)毛子整洁架构(CQRS/Dapper/领域事件处理器/垂直切片)

文章目录 项目地址一、Application 层1.1 定义CQRS的接口以及其他服务1. Command2. IQuery查询3. 当前时间服务接口4. 邮件发送服务接口 1.2 ReserveBooking Command1. 处理传入的参数2. ReserveBookingCommandHandler3. BookingReservedDomainEvent 1.3 Query使用Sql查询1. 创…

如何修改MySQL数据库密码

文章目录 一、忘记数据库密码该如何修改1. 关闭数据库的服务2.跳过安全检查3. 重置密码4.查询用户是否存在5.退出验证密码是否正确 二、未忘记密码该如何修改密码1.直接修改密码2.登录mysql 时间久了,忘记数据库密码了。。。。。 一、忘记数据库密码该如何修改 1. …

【Python】mat npy npz 文件格式

1、简介 MAT 文件和 NP(.npy 或 .npz)文件是两种不同的格式,用于存储数组数据。它们分别由 MATLAB 和 NumPy 开发,主要用于各自环境中的数据存储和交换。以下是这两种格式的主要区别: 1.1 格式和用途 MAT 文件&…

SpringBoot快速入门WebSocket(​​JSR-356附Demo源码)

现在我想写一篇Java快速入门WebSocket,就使用 JSR-356的websocket,我想分以下几点, 1. websocket介绍, 1.1 介绍 什么是WebSocket?​​ WebSocket 是一种基于 ​​TCP​​ 的​​全双工通信协议​​,允许客户端和服务器在​​单个长连接​​上实…

【安装配置教程】ubuntu安装配置Kodbox

目录 一、引言 二、环境配置 1. 服务器配置​ 2. 必备组件​ 三、安装基础环境​ 1. 安装 PHP 8.1 及扩展​ 2. 安装 MySQL 数据库 3.安装 Redis(可选,提升缓存性能) 4. 配置nginx文件 4.1. 创建 Kodbox 站点目录​ 4.2. 编写 Ng…