一、XML 概述
XML(可擴(kuò)展標(biāo)記語(yǔ)言)是一種用于描述數(shù)據(jù)的標(biāo)記語(yǔ)言,旨在提供一種通用的方式來傳輸和存儲(chǔ)數(shù)據(jù),特別是 Web 應(yīng)用程序中經(jīng)常使用的數(shù)據(jù)。XML 并不預(yù)定義標(biāo)記。因此,XML 更加靈活,并且可以適用于廣泛的應(yīng)用領(lǐng)域。
XML 文檔由元素(element)、屬性(attribute)和內(nèi)容(content)組成。
? ● 元素指的是標(biāo)記對(duì),包含文本、屬性或其他元素。
? ● 屬性提供了有關(guān)元素的其他信息。
? ● 內(nèi)容則是元素包含的數(shù)據(jù)或子元素。
XML 還可以通過使用 XML Schema 或 DTD(文檔類型定義)來定義文檔結(jié)構(gòu)。這些機(jī)制允許開發(fā)人員創(chuàng)建自定義規(guī)則以驗(yàn)證 XML 文檔是否符合其預(yù)期的格式。
XML 還支持命名空間、實(shí)體引用、注釋、處理指令等特性,使其能夠靈活地適應(yīng)各種數(shù)據(jù)需求。
語(yǔ)言基礎(chǔ)類庫(kù)提供了 XML 相關(guān)的基礎(chǔ)能力,包括:XML 的生成、XML 的解析和 XML 的轉(zhuǎn)換。
XML 可以作為數(shù)據(jù)交換格式,被各種系統(tǒng)和應(yīng)用程序所支持。例如 Web 服務(wù),可以將結(jié)構(gòu)化數(shù)據(jù)以 XML 格式進(jìn)行傳遞。
XML 還可以作為消息傳遞格式,在分布式系統(tǒng)中用于不同節(jié)點(diǎn)之間的通信與交互。
二、XML 生成
注意事項(xiàng)
? ● XML 標(biāo)簽必須成對(duì)出現(xiàn),生成開始標(biāo)簽就要生成結(jié)束標(biāo)簽。
? ● XML 標(biāo)簽對(duì)大小寫敏感,開始標(biāo)簽與結(jié)束標(biāo)簽大小寫要一致。
開發(fā)步驟
XML 模塊提供 XmlSerializer 類來生成 XML 文件,輸入為固定長(zhǎng)度的 Arraybuffer 或 DataView 對(duì)象,該對(duì)象用于存放輸出的 XML 數(shù)據(jù)。
通過調(diào)用不同的方法來寫入不同的內(nèi)容,如 startElement (name: string) 寫入元素開始標(biāo)記,setText (text: string) 寫入標(biāo)簽值。
XML 模塊的 API 接口可以參考 @ohos.xml 的詳細(xì)描述,按需求調(diào)用對(duì)應(yīng)函數(shù)可以生成一份完整的 XML 文件。
? 1. 引入模塊。
import xml from '@ohos.xml'; import util from '@ohos.util';
? 2. 創(chuàng)建緩沖區(qū),構(gòu)造 XmlSerializer 對(duì)象(可以基于 Arraybuffer 構(gòu)造 XmlSerializer 對(duì)象, 也可以基于 DataView 構(gòu)造 XmlSerializer 對(duì)象)。
// 1.基于Arraybuffer構(gòu)造XmlSerializer對(duì)象 let arrayBuffer = new ArrayBuffer(2048); // 創(chuàng)建一個(gè)2048字節(jié)的緩沖區(qū) let thatSer = new xml.XmlSerializer(arrayBuffer); // 基于Arraybuffer構(gòu)造XmlSerializer對(duì)象 // 2.基于DataView構(gòu)造XmlSerializer對(duì)象 let arrayBuffer = new ArrayBuffer(2048); // 創(chuàng)建一個(gè)2048字節(jié)的緩沖區(qū) let dataView = new DataView(arrayBuffer); // 使用DataView對(duì)象操作ArrayBuffer對(duì)象 let thatSer = new xml.XmlSerializer(dataView); // 基于DataView構(gòu)造XmlSerializer對(duì)象
? 3. 調(diào)用 XML 元素生成函數(shù)。
thatSer.setDeclaration(); // 寫入xml的聲明 thatSer.startElement('bookstore'); // 寫入元素開始標(biāo)記 thatSer.startElement('book'); // 嵌套元素開始標(biāo)記 thatSer.setAttributes('category', 'COOKING'); // 寫入屬性及屬性值 thatSer.startElement('title'); thatSer.setAttributes('lang', 'en'); thatSer.setText('Everyday'); // 寫入標(biāo)簽值 thatSer.endElement(); // 寫入結(jié)束標(biāo)記 thatSer.startElement('author'); thatSer.setText('Giada'); thatSer.endElement(); thatSer.startElement('year'); thatSer.setText('2005'); thatSer.endElement(); thatSer.endElement(); thatSer.endElement();
? 4. 使用 Uint8Array 操作 Arraybuffer,調(diào)用 TextDecoder 對(duì) Uint8Array 解碼后輸出。
let view = new Uint8Array(arrayBuffer); // 使用Uint8Array讀取arrayBuffer的數(shù)據(jù) let textDecoder = util.TextDecoder.create(); // 調(diào)用util模塊的TextDecoder類 let res = textDecoder.decodeWithStream(view); // 對(duì)view解碼 console.info(res);
輸出結(jié)果如下:
?xml version="1.0" encoding="utf-8"??>rn rn Everyday/title?>rn Giada/author?>rn 2005/year?>rn /book?>rn/bookstore?>
審核編輯 黃宇
-
XML
+關(guān)注
關(guān)注
0文章
186瀏覽量
32993 -
HarmonyOS
+關(guān)注
關(guān)注
79文章
1946瀏覽量
29739
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論