• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.xml (XML解析与生成)
2<!--Kit: ArkTS-->
3<!--Subsystem: CommonLibrary-->
4<!--Owner: @xliu-huanwei; @shilei123; @huanghello-->
5<!--Designer: @yuanyao14-->
6<!--Tester: @kirl75; @zsw_zhushiwei-->
7<!--Adviser: @ge-yafang-->
8
9本模块提供XML生成和解析的接口。
10
11本模块提供了两种生成XML文件的方式:
12* [XmlSerializer](#xmlserializer):适用于已知XML文本大小的情况
13* [XmlDynamicSerializer<sup>20+</sup>](#xmldynamicserializer20):适用于未知XML文本大小的情况。
14
15> **说明:**
16>
17> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
18
19
20## 导入模块
21
22```
23import { xml } from '@kit.ArkTS';
24```
25
26## XmlSerializer
27
28XmlSerializer接口用于生成XML文件。
29
30### constructor
31
32constructor(buffer: ArrayBuffer | DataView, encoding?: string)
33
34XmlSerializer的构造函数。
35
36> **说明:**
37>
38> buffer是开发者根据需要自定义大小的缓存区域,用于临时存储生成的XML文本。在使用过程中必须确保缓存区域足以容纳生成的文本内容。
39
40**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
41
42**系统能力:** SystemCapability.Utils.Lang
43
44**参数:**
45
46| 参数名   | 类型                              | 必填 | 说明                                             |
47| -------- | --------------------------------- | ---- | ------------------------------------------------ |
48| buffer   | ArrayBuffer \| DataView | 是   | 用于接收写入XML信息的ArrayBuffer或DataView内存。 |
49| encoding | string                            | 否   | 编码格式,默认'utf-8'(目前仅支持'utf-8')。               |
50
51**错误码:**
52
53以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
54
55| 错误码ID | 错误信息 |
56| -------- | -------- |
57| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
58
59**示例:**
60
61```ts
62let arrayBuffer = new ArrayBuffer(2048);
63let thatSer = new xml.XmlSerializer(arrayBuffer, "utf-8");
64```
65
66### setAttributes
67
68setAttributes(name: string, value: string): void
69
70添加元素的属性和属性值。
71
72> **说明:**
73>
74> 该接口对所添加数据不做标准XML校验处理,确保所添加的数据符合标准XML规范。例如不允许添加数字开头的属性名称以及添加多个同名的属性名称。
75
76**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
77
78**系统能力:** SystemCapability.Utils.Lang
79
80**参数:**
81
82| 参数名 | 类型   | 必填 | 说明            |
83| ------ | ------ | ---- | --------------- |
84| name   | string | 是   | 属性。   |
85| value  | string | 是   | 属性值。 |
86
87**错误码:**
88
89以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
90
91| 错误码ID | 错误信息 |
92| -------- | -------- |
93| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
94
95**示例:**
96
97```ts
98import { util } from '@kit.ArkTS';
99
100let arrayBuffer = new ArrayBuffer(2048);
101let thatSer = new xml.XmlSerializer(arrayBuffer);
102thatSer.startElement("note");
103thatSer.setAttributes("importance", "high");
104thatSer.endElement();
105let uint8 = new Uint8Array(arrayBuffer);
106let result = util.TextDecoder.create().decodeToString(uint8);
107console.info(result); // <note importance="high"/>
108```
109
110### addEmptyElement
111
112addEmptyElement(name: string): void
113
114添加一个空元素。
115
116> **说明:**
117>
118> 该接口对所添加数据不做标准XML校验处理,确保所添加的数据符合标准XML规范。例如不允许添加数字开头的元素名称。
119
120**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
121
122**系统能力:** SystemCapability.Utils.Lang
123
124**参数:**
125
126| 参数名 | 类型   | 必填 | 说明               |
127| ------ | ------ | ---- | ------------------ |
128| name   | string | 是   | 元素的名称。 |
129
130**错误码:**
131
132以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
133
134| 错误码ID | 错误信息 |
135| -------- | -------- |
136| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
137
138**示例:**
139
140```ts
141import { util } from '@kit.ArkTS';
142
143let arrayBuffer = new ArrayBuffer(2048);
144let thatSer = new xml.XmlSerializer(arrayBuffer);
145thatSer.addEmptyElement("d");
146let uint8 = new Uint8Array(arrayBuffer);
147let result = util.TextDecoder.create().decodeToString(uint8);
148console.info(result); // <d/>
149```
150
151### setDeclaration
152
153setDeclaration(): void
154
155添加文件声明。
156
157**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
158
159**系统能力:** SystemCapability.Utils.Lang
160
161**示例:**
162
163```ts
164import { util } from '@kit.ArkTS';
165
166let arrayBuffer = new ArrayBuffer(2048);
167let thatSer = new xml.XmlSerializer(arrayBuffer);
168thatSer.setDeclaration();
169let uint8 = new Uint8Array(arrayBuffer);
170let result = util.TextDecoder.create().decodeToString(uint8);
171console.info(result);
172// <?xml version="1.0" encoding="utf-8"?>
173```
174
175### startElement
176
177startElement(name: string): void
178
179根据给定名称添加元素开始标记。
180
181> **说明:**
182>
183>- 调用该接口后须调用[endElement](#endelement)写入元素结束标记,以确保节点正确闭合。
184>
185>- 该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。比如不允许添加数字开头的元素名称。
186
187**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
188
189**系统能力:** SystemCapability.Utils.Lang
190
191**参数:**
192
193| 参数名 | 类型   | 必填 | 说明               |
194| ------ | ------ | ---- | ------------------ |
195| name   | string | 是   | 当前元素的元素名。 |
196
197**错误码:**
198
199以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
200
201| 错误码ID | 错误信息 |
202| -------- | -------- |
203| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
204
205**示例:**
206
207```ts
208import { util } from '@kit.ArkTS';
209
210let arrayBuffer = new ArrayBuffer(2048);
211let thatSer = new xml.XmlSerializer(arrayBuffer);
212thatSer.startElement("note");
213thatSer.setText("Happy");
214thatSer.endElement();
215let uint8 = new Uint8Array(arrayBuffer);
216let result = util.TextDecoder.create().decodeToString(uint8);
217console.info(result);
218// <note>Happy</note>
219```
220
221### endElement
222
223endElement(): void
224
225添加元素结束标记。
226
227> **说明:**
228>
229> 调用该接口前必须先调用[startElement](#startelement)接口写入元素开始标记。
230
231**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
232
233**系统能力:** SystemCapability.Utils.Lang
234
235**示例:**
236
237```ts
238import { util } from '@kit.ArkTS';
239
240let arrayBuffer = new ArrayBuffer(2048);
241let thatSer = new xml.XmlSerializer(arrayBuffer);
242thatSer.startElement("note");
243thatSer.setText("Happy");
244thatSer.endElement();
245let uint8 = new Uint8Array(arrayBuffer);
246let result = util.TextDecoder.create().decodeToString(uint8);
247console.info(result);
248// <note>Happy</note>
249```
250
251### setNamespace
252
253setNamespace(prefix: string, namespace: string): void
254
255添加当前元素标记的命名空间。
256
257> **说明:**
258>
259> 该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。例如禁止添加数字开头的前缀以及为同一个元素设置多个命名空间。
260
261**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
262
263**系统能力:** SystemCapability.Utils.Lang
264
265**参数:**
266
267| 参数名    | 类型   | 必填 | 说明                           |
268| --------- | ------ | ---- | ------------------------------ |
269| prefix    | string | 是   | 当前元素及其子元素的前缀。     |
270| namespace | string | 是   | 当前元素及其子元素的命名空间。 |
271
272**错误码:**
273
274以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
275
276| 错误码ID | 错误信息 |
277| -------- | -------- |
278| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
279
280**示例:**
281
282```ts
283import { util } from '@kit.ArkTS';
284
285let arrayBuffer = new ArrayBuffer(2048);
286let thatSer = new xml.XmlSerializer(arrayBuffer);
287thatSer.setNamespace("h", "http://www.w3.org/TR/html4/");
288thatSer.startElement("note");
289thatSer.endElement();
290let uint8 = new Uint8Array(arrayBuffer);
291let result = util.TextDecoder.create().decodeToString(uint8);
292console.info(result);
293// <h:note xmlns:h="http://www.w3.org/TR/html4/"/>
294```
295
296### setComment
297
298setComment(text: string): void
299
300添加注释内容。
301
302**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
303
304**系统能力:** SystemCapability.Utils.Lang
305
306**参数:**
307
308| 参数名 | 类型   | 必填 | 说明                 |
309| ------ | ------ | ---- | -------------------- |
310| text   | string | 是   | 当前元素的注释内容。 |
311
312**错误码:**
313
314以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
315
316| 错误码ID | 错误信息 |
317| -------- | -------- |
318| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
319
320**示例:**
321
322```ts
323import { util } from '@kit.ArkTS';
324
325let arrayBuffer = new ArrayBuffer(2048);
326let thatSer = new xml.XmlSerializer(arrayBuffer);
327thatSer.setComment("Hello, World!");
328let uint8 = new Uint8Array(arrayBuffer);
329let result = util.TextDecoder.create().decodeToString(uint8);
330console.info(result); // <!--Hello, World!-->
331```
332
333### setCDATA
334
335setCDATA(text: string): void
336
337提供在CDATA标签中添加数据的能力,所生成的CDATA标签结构为:"\<!\[CDATA\[" + 所添加的数据 + "\]\]\>"。
338
339> **说明:**
340>
341> 该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。比如不允许在CDATA标签中添加包含"\]\]\>"字符串的数据。
342
343**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
344
345**系统能力:** SystemCapability.Utils.Lang
346
347**参数:**
348
349| 参数名 | 类型   | 必填 | 说明              |
350| ------ | ------ | ---- | ----------------- |
351| text   | string | 是   | CDATA属性的内容。 |
352
353**错误码:**
354
355以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
356
357| 错误码ID | 错误信息 |
358| -------- | -------- |
359| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
360
361**示例:**
362
363```ts
364import { util } from '@kit.ArkTS';
365
366let arrayBuffer = new ArrayBuffer(2048);
367let thatSer = new xml.XmlSerializer(arrayBuffer);
368thatSer.setCDATA('root SYSTEM')
369let uint8 = new Uint8Array(arrayBuffer);
370let result = util.TextDecoder.create().decodeToString(uint8);
371console.info(result); // <![CDATA[root SYSTEM]]>
372```
373
374### setText
375
376setText(text: string): void
377
378添加标签值。
379
380**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
381
382**系统能力:** SystemCapability.Utils.Lang
383
384**参数:**
385
386| 参数名 | 类型   | 必填 | 说明             |
387| ------ | ------ | ---- | ---------------- |
388| text   | string | 是   | text属性的内容。 |
389
390**错误码:**
391
392以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
393
394| 错误码ID | 错误信息 |
395| -------- | -------- |
396| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
397
398**示例:**
399
400```ts
401import { util } from '@kit.ArkTS';
402
403let arrayBuffer = new ArrayBuffer(2048);
404let thatSer = new xml.XmlSerializer(arrayBuffer);
405thatSer.startElement("note");
406thatSer.setAttributes("importance", "high");
407thatSer.setText("Happy");
408thatSer.endElement();
409let uint8 = new Uint8Array(arrayBuffer);
410let result = util.TextDecoder.create().decodeToString(uint8);
411console.info(result); // <note importance="high">Happy</note>
412```
413
414### setDocType
415
416setDocType(text: string): void
417
418添加文档类型。
419
420**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
421
422**系统能力:** SystemCapability.Utils.Lang
423
424**参数:**
425
426| 参数名 | 类型   | 必填 | 说明                |
427| ------ | ------ | ---- | ------------------- |
428| text   | string | 是   | DocType属性的内容。 |
429
430**错误码:**
431
432以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
433
434| 错误码ID | 错误信息 |
435| -------- | -------- |
436| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
437
438**示例:**
439
440```ts
441import { util } from '@kit.ArkTS';
442
443let arrayBuffer = new ArrayBuffer(2048);
444let thatSer = new xml.XmlSerializer(arrayBuffer);
445thatSer.setDocType('root SYSTEM "http://www.test.org/test.dtd"');
446let uint8 = new Uint8Array(arrayBuffer);
447let result = util.TextDecoder.create().decodeToString(uint8);
448console.info(result); // <!DOCTYPE root SYSTEM "http://www.test.org/test.dtd">
449```
450
451## XmlDynamicSerializer<sup>20+</sup>
452
453XmlDynamicSerializer类用于动态生成XML字符串。当无法确定XML内容长度时,推荐使用该类。
454
455> **说明:**
456>
457> 使用该类构造的对象无需自行创建ArrayBuffer,程序动态扩容,可以不断添加XML元素,最终序列化结果字符串长度上限为100000。
458
459### constructor<sup>20+</sup>
460
461constructor(encoding?: string)
462
463XmlDynamicSerializer的构造函数。
464
465**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。
466
467**系统能力:** SystemCapability.Utils.Lang
468
469**参数:**
470
471| 参数名   | 类型                              | 必填 | 说明                                             |
472| -------- | --------------------------------- | ---- | ------------------------------------------------ |
473| encoding | string                            | 否   | 编码格式,默认'utf-8'(目前仅支持'utf-8')。          |
474
475**错误码:**
476
477以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
478
479| 错误码ID | 错误信息 |
480| -------- | -------- |
481| 10200066 | Incorrect encoding format, only support utf-8. |
482
483**示例:**
484
485```ts
486let serializer = new xml.XmlDynamicSerializer('utf-8');
487```
488
489### getOutput<sup>20+</sup>
490
491getOutput(): ArrayBuffer
492
493返回XML字符串的ArrayBuffer。
494
495**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。
496
497**系统能力:** SystemCapability.Utils.Lang
498
499**返回值:**
500
501| 类型   | 说明                 |
502| ------ | -------------------- |
503| ArrayBuffer | 用于接收写入XML信息的ArrayBuffer内存。 |
504
505**示例:**
506
507```ts
508import { util } from '@kit.ArkTS';
509
510let serializer = new xml.XmlDynamicSerializer('utf-8');
511serializer.startElement("note");
512serializer.setText("Happy");
513serializer.endElement();
514let arr = serializer.getOutput();
515let uint8 = new Uint8Array(arr);
516let result = util.TextDecoder.create().decodeToString(uint8);
517console.info(result); // <note>Happy</note>
518```
519
520### setAttributes<sup>20+</sup>
521
522setAttributes(name: string, value: string): void
523
524写入元素的属性和属性值。
525
526> **说明:**
527>
528> 该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。比如不允许添加数字开头的属性名称以及添加多个同名的属性名称。
529
530**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。
531
532**系统能力:** SystemCapability.Utils.Lang
533
534**参数:**
535
536| 参数名 | 类型   | 必填 | 说明            |
537| ------ | ------ | ---- | --------------- |
538| name   | string | 是   | 属性。所组成的XML长度不能超过100000。|
539| value  | string | 是   | 属性值。所组成的XML长度不能超过100000。|
540
541**错误码:**
542
543以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
544
545| 错误码ID | 错误信息 |
546| -------- | -------- |
547| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
548| 10200063 | Illegal position for xml. |
549| 10200064 | Cannot be an empty string. |
550
551**示例:**
552
553```ts
554import { util } from '@kit.ArkTS';
555
556let serializer = new xml.XmlDynamicSerializer('utf-8');
557serializer.startElement("note");
558serializer.setAttributes("importance", "high");
559serializer.endElement();
560let arrayBuffer = serializer.getOutput();
561let uint8 = new Uint8Array(arrayBuffer);
562let result = util.TextDecoder.create().decodeToString(uint8);
563console.info(result); // <note importance="high"/>
564```
565
566### addEmptyElement<sup>20+</sup>
567
568addEmptyElement(name: string): void
569
570写入一个空元素。
571
572> **说明:**
573>
574> 该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。比如不允许添加数字开头的元素名称。
575
576**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。
577
578**系统能力:** SystemCapability.Utils.Lang
579
580**参数:**
581
582| 参数名 | 类型   | 必填 | 说明               |
583| ------ | ------ | ---- | ------------------ |
584| name   | string | 是   | 该空元素的元素名。所组成的XML长度不能超过100000。|
585
586**错误码:**
587
588以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
589
590| 错误码ID | 错误信息 |
591| -------- | -------- |
592| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
593| 10200064 | Cannot be an empty string. |
594
595**示例:**
596
597```ts
598import { util } from '@kit.ArkTS';
599
600let serializer = new xml.XmlDynamicSerializer('utf-8');
601serializer.addEmptyElement("d");
602let arrayBuffer = serializer.getOutput();
603let uint8 = new Uint8Array(arrayBuffer);
604let result = util.TextDecoder.create().decodeToString(uint8);
605console.info(result); // <d/>
606```
607
608### setDeclaration<sup>20+</sup>
609
610setDeclaration(): void
611
612编写带有编码的文件声明。
613
614**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。
615
616**系统能力:** SystemCapability.Utils.Lang
617
618**错误码:**
619
620以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
621
622| 错误码ID | 错误信息 |
623| -------- | -------- |
624| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
625| 10200063 | Illegal position for xml. |
626
627**示例:**
628
629```ts
630import { util } from '@kit.ArkTS';
631
632let serializer = new xml.XmlDynamicSerializer('utf-8');
633serializer.setDeclaration();
634let arrayBuffer = serializer.getOutput();
635let uint8 = new Uint8Array(arrayBuffer);
636let result = util.TextDecoder.create().decodeToString(uint8);
637console.info(result); // <?xml version="1.0" encoding="utf-8"?>
638```
639
640### startElement<sup>20+</sup>
641
642startElement(name: string): void
643
644写入元素开始标记。
645
646> **说明:**
647>
648>- 调用该接口后须调用[endElement](#endelement)写入元素结束标记,以确保节点正确闭合。
649>
650>- 该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。比如不允许添加数字开头的元素名称。
651
652**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。
653
654**系统能力:** SystemCapability.Utils.Lang
655
656**参数:**
657
658| 参数名 | 类型   | 必填 | 说明               |
659| ------ | ------ | ---- | ------------------ |
660| name   | string | 是   | 当前元素的元素名。所组成的XML长度不能超过100000。|
661
662**错误码:**
663
664以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
665
666| 错误码ID | 错误信息 |
667| -------- | -------- |
668| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
669| 10200064 | Cannot be an empty string. |
670
671**示例:**
672
673```ts
674import { util } from '@kit.ArkTS';
675
676let serializer = new xml.XmlDynamicSerializer('utf-8');
677serializer.startElement("note");
678serializer.setText("Happy");
679serializer.endElement();
680let arrayBuffer = serializer.getOutput();
681let uint8 = new Uint8Array(arrayBuffer);
682let result = util.TextDecoder.create().decodeToString(uint8);
683console.info(result); // <note>Happy</note>
684```
685
686### endElement<sup>20+</sup>
687
688endElement(): void
689
690写入元素结束标记。
691
692> **说明:**
693>
694> 调用该接口前必须先调用[startElement](#startelement)接口写入元素开始标记。
695
696**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。
697
698**系统能力:** SystemCapability.Utils.Lang
699
700**错误码:**
701
702以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
703
704| 错误码ID | 错误信息 |
705| -------- | -------- |
706| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
707| 10200065 | There is no match between the startElement and the endElement. |
708
709**示例:**
710
711```ts
712import { util } from '@kit.ArkTS';
713
714let serializer = new xml.XmlDynamicSerializer('utf-8');
715serializer.startElement("note");
716serializer.setText("Happy");
717serializer.endElement();
718let arrayBuffer = serializer.getOutput();
719let uint8 = new Uint8Array(arrayBuffer);
720let result = util.TextDecoder.create().decodeToString(uint8);
721console.info(result); // <note>Happy</note>
722```
723
724### setNamespace<sup>20+</sup>
725
726setNamespace(prefix: string, namespace: string): void
727
728写入当前元素标记的命名空间。
729
730> **说明:**
731>
732> 该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。比如不允许添加数字开头的前缀以及对同一个元素设置多个命名空间。
733
734**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。
735
736**系统能力:** SystemCapability.Utils.Lang
737
738**参数:**
739
740| 参数名    | 类型   | 必填 | 说明                           |
741| --------- | ------ | ---- | ------------------------------ |
742| prefix    | string | 是   | 当前元素及其子元素的前缀。所组成的XML长度不能超过100000。|
743| namespace | string | 是   | 当前元素及其子元素的命名空间。所组成的XML长度不能超过100000。|
744
745**错误码:**
746
747以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
748
749| 错误码ID | 错误信息 |
750| -------- | -------- |
751| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
752| 10200064 | Cannot be an empty string. |
753
754**示例:**
755
756```ts
757import { util } from '@kit.ArkTS';
758
759let serializer = new xml.XmlDynamicSerializer('utf-8');
760serializer.setNamespace("h", "http://www.w3.org/TR/html4/");
761serializer.startElement("note");
762serializer.endElement();
763let arrayBuffer = serializer.getOutput();
764let uint8 = new Uint8Array(arrayBuffer);
765let result = util.TextDecoder.create().decodeToString(uint8);
766console.info(result); // <h:note xmlns:h="http://www.w3.org/TR/html4/"/>
767```
768
769### setComment<sup>20+</sup>
770
771setComment(text: string): void
772
773写入注释内容。
774
775**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。
776
777**系统能力:** SystemCapability.Utils.Lang
778
779**参数:**
780
781| 参数名 | 类型   | 必填 | 说明                 |
782| ------ | ------ | ---- | -------------------- |
783| text   | string | 是   | 当前元素的注释内容。所组成的XML长度不能超过100000。|
784
785**错误码:**
786
787以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
788
789| 错误码ID | 错误信息 |
790| -------- | -------- |
791| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
792| 10200064 | Cannot be an empty string. |
793
794**示例:**
795
796```ts
797import { util } from '@kit.ArkTS';
798
799let serializer = new xml.XmlDynamicSerializer('utf-8');
800serializer.setComment("Hello, World!");
801let arrayBuffer = serializer.getOutput();
802let uint8 = new Uint8Array(arrayBuffer);
803let result = util.TextDecoder.create().decodeToString(uint8);
804console.info(result); // <!--Hello, World!-->
805```
806
807### setCdata<sup>20+</sup>
808
809setCdata(text: string): void
810
811提供在CDATA标签中添加数据的能力,所生成的CDATA标签结构为:"\<!\[CDATA\[" + 所添加的数据 + "\]\]\>"。
812
813> **说明:**
814>
815> 该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。比如不允许在CDATA标签中添加包含"\]\]\>"字符串的数据。
816
817**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。
818
819**系统能力:** SystemCapability.Utils.Lang
820
821**参数:**
822
823| 参数名 | 类型   | 必填 | 说明              |
824| ------ | ------ | ---- | ----------------- |
825| text   | string | 是   | CDATA属性的内容。所组成的XML长度不能超过100000。|
826
827**错误码:**
828
829以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
830
831| 错误码ID | 错误信息 |
832| -------- | -------- |
833| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
834| 10200064 | Cannot be an empty string. |
835
836**示例:**
837
838```ts
839import { util } from '@kit.ArkTS';
840
841let serializer = new xml.XmlDynamicSerializer('utf-8');
842serializer.setCdata('root SYSTEM')
843let arrayBuffer = serializer.getOutput();
844let uint8 = new Uint8Array(arrayBuffer);
845let result = util.TextDecoder.create().decodeToString(uint8);
846console.info(result); // <![CDATA[root SYSTEM]]>
847```
848
849### setText<sup>20+</sup>
850
851setText(text: string): void
852
853写入标签值。
854
855**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。
856
857**系统能力:** SystemCapability.Utils.Lang
858
859**参数:**
860
861| 参数名 | 类型   | 必填 | 说明             |
862| ------ | ------ | ---- | ---------------- |
863| text   | string | 是   | 标签值。所组成的XML长度不能超过100000。|
864
865**错误码:**
866
867以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
868
869| 错误码ID | 错误信息 |
870| -------- | -------- |
871| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
872| 10200064 | Cannot be an empty string. |
873
874**示例:**
875
876```ts
877import { util } from '@kit.ArkTS';
878
879let serializer = new xml.XmlDynamicSerializer('utf-8');
880serializer.startElement("note");
881serializer.setAttributes("importance", "high");
882serializer.setText("Happy");
883serializer.endElement();
884let arrayBuffer = serializer.getOutput();
885let uint8 = new Uint8Array(arrayBuffer);
886let result = util.TextDecoder.create().decodeToString(uint8);
887console.info(result); // <note importance="high">Happy</note>
888```
889
890### setDocType<sup>20+</sup>
891
892setDocType(text: string): void
893
894写入文档类型。
895
896**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。
897
898**系统能力:** SystemCapability.Utils.Lang
899
900**参数:**
901
902| 参数名 | 类型   | 必填 | 说明                |
903| ------ | ------ | ---- | ------------------- |
904| text   | string | 是   | DocType属性的内容。所组成的XML长度不能超过100000。 |
905
906**错误码:**
907
908以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
909
910| 错误码ID | 错误信息 |
911| -------- | -------- |
912| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
913| 10200064 | Cannot be an empty string. |
914
915**示例:**
916
917```ts
918import { util } from '@kit.ArkTS';
919
920let serializer = new xml.XmlDynamicSerializer('utf-8');
921serializer.setDocType('root SYSTEM "http://www.test.org/test.dtd"');
922let arrayBuffer = serializer.getOutput();
923let uint8 = new Uint8Array(arrayBuffer);
924let result = util.TextDecoder.create().decodeToString(uint8);
925console.info(result); // <!DOCTYPE root SYSTEM "http://www.test.org/test.dtd">
926```
927
928## XmlPullParser
929
930XmlPullParser接口用于解析现有的XML文件。
931
932### constructor
933
934constructor(buffer: ArrayBuffer | DataView, encoding?: string)
935
936构造并返回一个XmlPullParser对象。
937
938**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
939
940**系统能力:** SystemCapability.Utils.Lang
941
942**参数:**
943
944| 参数名   | 类型                              | 必填 | 说明                                       |
945| -------- | --------------------------------- | ---- | ------------------------------------------ |
946| buffer   | ArrayBuffer \| DataView | 是   | 用于解析的XML文本信息。|
947| encoding | string                            | 否   | 编码格式,默认'utf-8'(目前仅支持'utf-8')。         |
948
949**错误码:**
950
951以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
952
953| 错误码ID | 错误信息 |
954| -------- | -------- |
955| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
956
957**示例:**
958
959```ts
960import { util } from '@kit.ArkTS';
961
962let strXml = '<title>Happy</title>'
963let textEncoder = new util.TextEncoder();
964let uint8Array = textEncoder.encodeInto(strXml);
965let that = new xml.XmlPullParser(uint8Array.buffer as object as ArrayBuffer, 'UTF-8');
966```
967
968### parseXml<sup>14+</sup>
969
970parseXml(option: ParseOptions): void
971
972解析XML。
973
974**原子化服务API**:从API version 14 开始,该接口支持在原子化服务中使用。
975
976**系统能力:** SystemCapability.Utils.Lang
977
978**参数:**
979
980| 参数名 | 类型                          | 必填 | 说明          |
981| ------ | ----------------------------- | ---- | ------------- |
982| option | [ParseOptions](#parseoptions) | 是   | XML解析选项。 |
983
984**错误码:**
985
986以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
987
988| 错误码ID | 错误信息 |
989| -------- | -------- |
990| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
991
992**示例:**
993具体使用场景可参照[解析XML标签和标签值](../../arkts-utils/xml-parsing.md#解析xml标签和标签值)和[解析XML属性和属性值](../../arkts-utils/xml-parsing.md#解析xml属性和属性值)
994
995```ts
996import { xml, util } from '@kit.ArkTS';
997
998let strxml =
999  '<?xml version="1.0" encoding="utf-8"?>' +
1000    '<note importance="high" logged="true">' +
1001    '    <title><![CDATA[测试\n测试]]></title>' +
1002    '</note>';
1003let textEncoder = new util.TextEncoder();
1004let uint8 = textEncoder.encodeInto(strxml);
1005
1006function func(key: xml.EventType, value: xml.ParseInfo) {
1007  if (key == xml.EventType.CDSECT) {
1008    console.info(JSON.stringify(value.getText()));
1009  }
1010  return true;
1011}
1012let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
1013let pullParser = new xml.XmlPullParser(uint8.buffer as object as ArrayBuffer);
1014pullParser.parseXml(options);
1015// "测试\n测试"
1016```
1017
1018### parse<sup>(deprecated)</sup>
1019
1020parse(option: ParseOptions): void
1021
1022该接口用于解析XML。
1023
1024> **说明:**
1025>
1026> 从API version 8开始支持,从API version 14开始废弃,建议使用[parseXml<sup>14+</sup>](#parsexml14)替代。
1027
1028**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
1029
1030**系统能力:** SystemCapability.Utils.Lang
1031
1032**参数:**
1033
1034| 参数名 | 类型                          | 必填 | 说明                             |
1035| ------ | ----------------------------- | ---- | -------------------------------- |
1036| option | [ParseOptions](#parseoptions) | 是   | XML解析选项。 |
1037
1038**错误码:**
1039
1040以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
1041
1042| 错误码ID | 错误信息 |
1043| -------- | -------- |
1044| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
1045
1046**示例:**
1047
1048```ts
1049import { util } from '@kit.ArkTS';
1050
1051let strXml =
1052  '<?xml version="1.0" encoding="utf-8"?>' +
1053  '<note importance="high" logged="true">' +
1054    '<company>John &amp; Hans</company>' +
1055    '<title>Happy</title>' +
1056  '</note>';
1057let textEncoder = new util.TextEncoder();
1058let arrBuffer = textEncoder.encodeInto(strXml);
1059let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer, 'UTF-8');
1060let str = '';
1061function func(name: string, value: string) {
1062  str = name + value;
1063  console.info(str);
1064  return true;
1065}
1066let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tagValueCallbackFunction:func}
1067that.parse(options);
1068// note
1069// company
1070// John & Hans
1071// company
1072// title
1073// Happy
1074// title
1075// note
1076```
1077
1078## AttributeWithTagCb<sup>20+</sup>
1079
1080type AttributeWithTagCb = (tagName: string, key: string, value: string) => boolean
1081
1082**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
1083
1084**系统能力:** SystemCapability.Utils.Lang
1085
1086**参数:**
1087
1088| 参数名   |  类型  | 必填 |  说明   |
1089| ------- | -------| ---- | ------ |
1090| tagName | string | 是   | 标签名称。|
1091| key     | string | 是   | 属性名称。|
1092| value   | string | 是   | 属性的值。|
1093
1094**返回值:**
1095
1096| 类型    | 说明                                                                       |
1097| ------- | ------------------------------------------------------------------------- |
1098| boolean | 是否继续解析标签名称、属性名称及属性的值。true表示继续解析,false表示停止解析。 |
1099
1100## ParseOptions
1101
1102XML解析选项。
1103
1104
1105**系统能力:** SystemCapability.Utils.Lang1106
1107
1108| 名称                           | 类型                                                         | 必填 | 说明                                    |
1109| ------------------------------ | ------------------------------------------------------------ | ---- | --------------------------------------- |
1110| supportDoctype                 | boolean                                                      | 否   | 是否解析文档类型,false表示不解析文档类型,true表示解析文档类型,默认值false。  <br/>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。|
1111| ignoreNameSpace                | boolean                                                      | 否   | 是否忽略命名空间,忽略命名空间后,将不会对其进行解析。true表示忽略命名空间,false表示不忽略命名空间,默认值false。 <br/>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。|
1112| tagValueCallbackFunction       | (name: string, value: string) =&gt; boolean | 否   | 解析开始标签、标签值和结束标签,默认值undefined,表示不解析。 <br/>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。|
1113| attributeValueCallbackFunction | (name: string, value: string) =&gt; boolean | 否   | 解析属性和属性值,默认值undefined,表示不解析。 <br/>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。|
1114| tokenValueCallbackFunction     | (eventType: [EventType](#eventtype), value: [ParseInfo](#parseinfo)) =&gt; boolean | 否   | 解析元素事件类型([EventType](#eventtype))和[ParseInfo](#parseinfo)属性,默认值undefined,表示不解析。 <br/>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。|
1115| attributeWithTagCallbackFunction<sup>20+</sup> | [AttributeWithTagCb](#attributewithtagcb20) | 否 | 解析标签名称、属性名称及属性的值,默认值为undefined,表示不执行解析。 <br/>**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。|
1116
1117## ParseInfo
1118
1119当前XML解析信息。
1120
1121
1122### getColumnNumber
1123
1124getColumnNumber(): number
1125
1126获取当前列号,从1开始计数。
1127
1128**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
1129
1130**系统能力:** SystemCapability.Utils.Lang
1131
1132**返回值:**
1133
1134| 类型   | 说明           |
1135| ------ | -------------- |
1136| number | 返回当前列号。 |
1137
1138**示例:**
1139
1140```ts
1141import { util } from '@kit.ArkTS';
1142
1143let strXml = '<?xml version="1.0" encoding="utf-8"?><note>Happy</note>';
1144let textEncoder = new util.TextEncoder();
1145let arrBuffer = textEncoder.encodeInto(strXml);
1146let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
1147let str = "";
1148function func(key: xml.EventType, value: xml.ParseInfo) {
1149  str += 'key:' + key + ' value:' + value.getColumnNumber() + ' ';
1150  return true; // Determines whether to continually parse, which is used to continue or terminate parsing.
1151}
1152let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
1153that.parseXml(options);
1154console.info(str);
1155// key:0 value:1 key:2 value:45 key:4 value:50 key:3 value:57 key:1 value:57
1156```
1157
1158### getDepth
1159
1160getDepth(): number
1161
1162获取元素的当前深度。
1163
1164> **说明:**
1165>
1166> 标签内的空白事件深度与标签的深度保持一致。
1167
1168**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
1169
1170**系统能力:** SystemCapability.Utils.Lang
1171
1172**返回值:**
1173
1174| 类型   | 说明                 |
1175| ------ | -------------------- |
1176| number | 返回元素的当前深度。 |
1177
1178**示例:**
1179
1180```ts
1181import { util } from '@kit.ArkTS';
1182
1183let strXml =
1184  '<?xml version="1.0" encoding="utf-8"?>' +
1185  '<note importance="high">' +
1186    '<title>Happy</title>' +
1187  '</note>';
1188let textEncoder = new util.TextEncoder();
1189let arrBuffer = textEncoder.encodeInto(strXml);
1190let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
1191let str = "";
1192function func(key: xml.EventType, value: xml.ParseInfo) {
1193  str += 'key:' + key + ' value:' + value.getDepth() + ' ';
1194  return true; // Determines whether to continually parse, which is used to continue or terminate parsing.
1195}
1196let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
1197that.parseXml(options);
1198console.info(str);
1199// key:0 value:0 key:2 value:1 key:2 value:2 key:4 value:2 key:3 value:2 key:3 value:1 key:1 value:0
1200```
1201
1202### getLineNumber
1203
1204getLineNumber(): number
1205
1206获取当前行号,从1开始。
1207
1208**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
1209
1210**系统能力:** SystemCapability.Utils.Lang
1211
1212**返回值:**
1213
1214| 类型   | 说明           |
1215| ------ | -------------- |
1216| number | 返回当前行号。 |
1217
1218**示例:**
1219
1220```ts
1221import { util } from '@kit.ArkTS';
1222
1223let strXml = '<?xml version="1.0" encoding="utf-8"?><note>Work</note>';
1224let textEncoder = new util.TextEncoder();
1225let arrBuffer = textEncoder.encodeInto(strXml);
1226let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
1227let str = "";
1228function func(key: xml.EventType, value: xml.ParseInfo) {
1229  str += 'key:' + key + ' value:' + value.getLineNumber() + ' ';
1230  return true; // Determines whether to continually parse, which is used to continue or terminate parsing.
1231}
1232let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
1233that.parseXml(options);
1234console.info(str);
1235// key:0 value:1 key:2 value:1 key:4 value:1 key:3 value:1 key:1 value:1
1236```
1237
1238### getName
1239
1240getName(): string
1241
1242获取当前元素名称。
1243
1244**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
1245
1246**系统能力:** SystemCapability.Utils.Lang
1247
1248**返回值:**
1249
1250| 类型   | 说明               |
1251| ------ | ------------------ |
1252| string | 返回当前元素名称。 |
1253
1254**示例:**
1255
1256```ts
1257import { util } from '@kit.ArkTS';
1258
1259let strXml = '<?xml version="1.0" encoding="utf-8"?><note>Happy</note>';
1260let textEncoder = new util.TextEncoder();
1261let arrBuffer = textEncoder.encodeInto(strXml);
1262let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
1263let str = "";
1264function func(key: xml.EventType, value: xml.ParseInfo) {
1265  str += 'key:' + key + ' value:' + value.getName() + ' ';
1266  return true; // Determines whether to continually parse, which is used to continue or terminate parsing.
1267}
1268let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
1269that.parseXml(options);
1270console.info(str);
1271// key:0 value: key:2 value:note key:4 value: key:3 value:note key:1 value:
1272```
1273### getNamespace
1274
1275getNamespace(): string
1276
1277获取当前元素的命名空间。
1278
1279**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
1280
1281**系统能力:** SystemCapability.Utils.Lang
1282
1283**返回值:**
1284
1285| 类型   | 说明                     |
1286| ------ | ------------------------ |
1287| string | 返回当前元素的命名空间。 |
1288
1289**示例:**
1290
1291```ts
1292import { util } from '@kit.ArkTS';
1293
1294let strXml =
1295  '<?xml version="1.0" encoding="utf-8"?>' +
1296  '<note xmlns:h="http://www.w3.org">' +
1297    '<h:title>Happy</h:title>' +
1298  '</note>';
1299let textEncoder = new util.TextEncoder();
1300let arrBuffer = textEncoder.encodeInto(strXml);
1301let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
1302let str = "";
1303function func(key: xml.EventType, value: xml.ParseInfo) {
1304  str += 'key:' + key + ' value:' + value.getNamespace() + ' ';
1305  return true; // Determines whether to continually parse, which is used to continue or terminate parsing.
1306}
1307let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:false, tokenValueCallbackFunction:func}
1308that.parseXml(options);
1309console.info(str);
1310// key:0 value: key:2 value: key:2 value:http://www.w3.org key:4 value: key:3 value:http://www.w3.org key:3 value: key:1 value:
1311```
1312### getPrefix
1313
1314getPrefix(): string
1315
1316获取当前元素前缀。
1317
1318**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
1319
1320**系统能力:** SystemCapability.Utils.Lang
1321
1322**返回值:**
1323
1324| 类型   | 说明               |
1325| ------ | ------------------ |
1326| string | 返回当前元素前缀。 |
1327
1328**示例:**
1329
1330```ts
1331import { util } from '@kit.ArkTS';
1332
1333let strXml =
1334  '<?xml version="1.0" encoding="utf-8"?>' +
1335  '<note xmlns:h="http://www.w3.org/TR/html4">' +
1336    '<h:title>Happy</h:title>' +
1337  '</note>';
1338let textEncoder = new util.TextEncoder();
1339let arrBuffer = textEncoder.encodeInto(strXml);
1340let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
1341let str = "";
1342function func(key: xml.EventType, value: xml.ParseInfo) {
1343  str += 'key:' + key + ' value:' + value.getPrefix() + ' ';
1344  return true; // Determines whether to continually parse, which is used to continue or terminate parsing.
1345}
1346let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:false, tokenValueCallbackFunction:func}
1347that.parseXml(options);
1348console.info(str);
1349// key:0 value: key:2 value: key:2 value:h key:4 value: key:3 value:h key:3 value: key:1 value:
1350```
1351
1352### getText
1353
1354getText(): string
1355
1356获取当前事件的文本内容。
1357
1358**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
1359
1360**系统能力:** SystemCapability.Utils.Lang
1361
1362**返回值:**
1363
1364| 类型   | 说明                     |
1365| ------ | ------------------------ |
1366| string | 返回当前事件的文本内容。 |
1367
1368**示例:**
1369
1370```ts
1371import { util } from '@kit.ArkTS';
1372
1373let strXml = '<?xml version="1.0" encoding="utf-8"?><note>Happy</note>';
1374let textEncoder = new util.TextEncoder();
1375let arrBuffer = textEncoder.encodeInto(strXml);
1376let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
1377let str = "";
1378function func(key: xml.EventType, value: xml.ParseInfo) {
1379  str += 'key:' + key + ' value:' + value.getText() + ' ';
1380  return true; // Determines whether to continually parse, which is used to continue or terminate parsing.
1381}
1382let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
1383that.parseXml(options);
1384console.info(str);
1385// key:0 value: key:2 value: key:4 value:Happy key:3 value: key:1 value:
1386```
1387### isEmptyElementTag
1388
1389isEmptyElementTag(): boolean
1390
1391判断当前元素是否为空元素。
1392
1393**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
1394
1395**系统能力:** SystemCapability.Utils.Lang
1396
1397**返回值:**
1398
1399| 类型    | 说明                         |
1400| ------- | ---------------------------- |
1401| boolean | 返回true,表示当前元素为空元素。返回false,表示当前元素为非空元素。 |
1402
1403**示例:**
1404
1405```ts
1406import { util } from '@kit.ArkTS';
1407
1408let strXml =
1409  '<?xml version="1.0" encoding="utf-8"?>' +
1410  '<note importance="high" logged="true">' +
1411    '<title/>' +
1412  '</note>';
1413let textEncoder = new util.TextEncoder();
1414let arrBuffer = textEncoder.encodeInto(strXml);
1415let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
1416let str = "";
1417function func(key: xml.EventType, value: xml.ParseInfo) {
1418  str += 'key:' + key + ' value:' + value.isEmptyElementTag() + ' ';
1419  return true; // Determines whether to continually parse, which is used to continue or terminate parsing.
1420}
1421let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
1422that.parseXml(options);
1423console.info(str);
1424// key:0 value:false key:2 value:false key:2 value:true key:3 value:false key:3 value:false key:1 value:false
1425```
1426### isWhitespace
1427
1428isWhitespace(): boolean
1429
1430判断当前事件是否仅包含空格字符。
1431
1432**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
1433
1434**系统能力:** SystemCapability.Utils.Lang
1435
1436**返回值:**
1437
1438| 类型    | 说明                                   |
1439| ------- | -------------------------------------- |
1440| boolean | 返回true,表示当前文本事件仅包含空格字符。 返回false,表示当前文本事件包含非空格字符。 |
1441
1442**示例:**
1443
1444```ts
1445import { util } from '@kit.ArkTS';
1446
1447let strXml =
1448  '<?xml version="1.0" encoding="utf-8"?>' +
1449  '<note importance="high" logged="true">' +
1450    '<title> </title>' +
1451  '</note>';
1452let textEncoder = new util.TextEncoder();
1453let arrBuffer = textEncoder.encodeInto(strXml);
1454let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
1455let str = "";
1456function func(key: xml.EventType, value: xml.ParseInfo) {
1457  str += 'key:' + key + ' value:' + value.isWhitespace() + ' ';
1458  return true; // Determines whether to continually parse, which is used to continue or terminate parsing.
1459}
1460let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
1461that.parseXml(options);
1462console.info(str);
1463// key:0 value:true key:2 value:false key:2 value:true key:10 value:true key:3 value:true key:3 value:true key:1 value:true
1464```
1465### getAttributeCount
1466
1467getAttributeCount(): number
1468
1469获取当前开始标记的属性数。
1470
1471**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
1472
1473**系统能力:** SystemCapability.Utils.Lang
1474
1475**返回值:**
1476| 类型   | 说明                   |
1477| ------ | ---------------------- |
1478| number | 当前开始标记的属性数。 |
1479
1480**示例:**
1481
1482```ts
1483import { util } from '@kit.ArkTS';
1484
1485let strXml = '<?xml version="1.0" encoding="utf-8"?><note importance="high" logged="true"/>';
1486let textEncoder = new util.TextEncoder();
1487let arrBuffer = textEncoder.encodeInto(strXml);
1488let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
1489let str = "";
1490function func(key: xml.EventType, value: xml.ParseInfo) {
1491  str += 'key:' + key + ' value:' + value.getAttributeCount() + ' ';
1492  return true; // Determines whether to continually parse, which is used to continue or terminate parsing.
1493}
1494let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
1495that.parseXml(options);
1496console.info(str);
1497// key:0 value:0 key:2 value:2 key:3 value:2 key:1 value:0
1498```
1499
1500## EventType
1501
1502事件类型枚举。
1503
1504**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
1505
1506**系统能力:** SystemCapability.Utils.Lang
1507
1508| 名称             | 值   | 说明                  |
1509| ---------------- | ---- | --------------------- |
1510| START_DOCUMENT   | 0    | 启动文件事件。        |
1511| END_DOCUMENT     | 1    | 结束文件事件。        |
1512| START_TAG        | 2    | 启动标签事件。        |
1513| END_TAG          | 3    | 结束标签事件。        |
1514| TEXT             | 4    | 文本事件。            |
1515| CDSECT           | 5    | CDATA事件。           |
1516| COMMENT          | 6    | XML注释事件。         |
1517| DOCDECL          | 7    | XML文档类型声明事件。 |
1518| INSTRUCTION      | 8    | XML处理指令声明事件。 |
1519| ENTITY_REFERENCE | 9    | 实体引用事件。        |
1520| WHITESPACE       | 10   | 空白事件。            |