当前位置: 代码网 > 科技>操作系统>鸿蒙系统 > 【中秋国庆不断更】XML在HarmonyOS中的生成,解析与转换(上)

【中秋国庆不断更】XML在HarmonyOS中的生成,解析与转换(上)

2024年08月04日 鸿蒙系统 我要评论
# 一、XML概述 XML(可扩展标记语言)是一种用于描述数据的标记语言,旨在提供一种通用的方式来传输和存储数据,特别是Web应用程序中经常使用的数据。XML并不预定义标记。因此,XML更加灵活,并且可以适用于广泛的应用领域。 XML文档由元素(element)、属性(attribute)和内容(content)组成。 ● 元素指的是标记对,包含文本、属性或其他元素。 ● 属性提供了有关元素的其他信息。 ● 内容则是元素包含的数据或子元素。 XM...

一、xml概述

xml(可扩展标记语言)是一种用于描述数据的标记语言,旨在提供一种通用的方式来传输和存储数据,特别是web应用程序中经常使用的数据。xml并不预定义标记。因此,xml更加灵活,并且可以适用于广泛的应用领域。

xml文档由元素(element)、属性(attribute)和内容(content)组成。

​ ● 元素指的是标记对,包含文本、属性或其他元素。

​ ● 属性提供了有关元素的其他信息。

​ ● 内容则是元素包含的数据或子元素。

xml还可以通过使用xml schema或dtd(文档类型定义)来定义文档结构。这些机制允许开发人员创建自定义规则以验证xml文档是否符合其预期的格式。

xml还支持命名空间、实体引用、注释、处理指令等特性,使其能够灵活地适应各种数据需求。

语言基础类库提供了xml相关的基础能力,包括:xml的生成xml的解析xml的转换

xml可以作为数据交换格式,被各种系统和应用程序所支持。例如web服务,可以将结构化数据以xml格式进行传递。

xml还可以作为消息传递格式,在分布式系统中用于不同节点之间的通信与交互。

二、xml生成

注意事项

​ ● xml标签必须成对出现,生成开始标签就要生成结束标签。

​ ● xml标签对大小写敏感,开始标签与结束标签大小写要一致。

开发步骤

xml模块提供xmlserializer类来生成xml文件,输入为固定长度的arraybuffer或dataview对象,该对象用于存放输出的xml数据。

通过调用不同的方法来写入不同的内容,如startelement(name: string)写入元素开始标记,settext(text: string)写入标签值。

xml模块的api接口可以参考@ohos.xml的详细描述,按需求调用对应函数可以生成一份完整的xml文件。

​ 1. 引入模块。

import xml from '@ohos.xml'; 
import util from '@ohos.util';

​ 2. 创建缓冲区,构造xmlserializer对象(可以基于arraybuffer构造xmlserializer对象, 也可以基于dataview构造xmlserializer对象)。

// 1.基于arraybuffer构造xmlserializer对象
let arraybuffer = new arraybuffer(2048); // 创建一个2048字节的缓冲区
let thatser = new xml.xmlserializer(arraybuffer); // 基于arraybuffer构造xmlserializer对象

// 2.基于dataview构造xmlserializer对象
let arraybuffer = new arraybuffer(2048); // 创建一个2048字节的缓冲区
let dataview = new dataview(arraybuffer); // 使用dataview对象操作arraybuffer对象
let thatser = new xml.xmlserializer(dataview); // 基于dataview构造xmlserializer对象

​ 3. 调用xml元素生成函数。

thatser.setdeclaration(); // 写入xml的声明
thatser.startelement('bookstore'); // 写入元素开始标记
thatser.startelement('book'); // 嵌套元素开始标记
thatser.setattributes('category', 'cooking'); // 写入属性及属性值
thatser.startelement('title');
thatser.setattributes('lang', 'en');
thatser.settext('everyday'); // 写入标签值
thatser.endelement(); // 写入结束标记
thatser.startelement('author');
thatser.settext('giada');
thatser.endelement();
thatser.startelement('year');
thatser.settext('2005');
thatser.endelement();
thatser.endelement();
thatser.endelement();

​ 4. 使用uint8array操作arraybuffer,调用textdecoder对uint8array解码后输出。

let view = new uint8array(arraybuffer); // 使用uint8array读取arraybuffer的数据
let textdecoder = util.textdecoder.create(); // 调用util模块的textdecoder类
let res = textdecoder.decodewithstream(view); // 对view解码
console.info(res);

输出结果如下:

<?xml version=\"1.0\" encoding=\"utf-8\"?><bookstore>\r\n  <book category=\"cooking\">\r\n    <title lang=\"en\">everyday</title>\r\n    <author>giada</author>\r\n    <year>2005</year>\r\n  </book>\r\n</bookstore>

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com