本模块提供XML生成和解析的接口,支持多种方式的XML文本生成与解析,可帮助开发者高效处理结构化XML数据。
本模块提供了两种生成XML文件的方式:
本模块提供了两种解析XML文件的方式:
本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
XmlSerializer接口用于生成XML文件。该接口基于预分配的ArrayBuffer缓存区域,通过顺序调用元素写入方法(如startElement、setAttributes、setText和endElement)将XML文本写入缓存。
constructor(buffer: ArrayBuffer | DataView, encoding?: string)
构造并返回一个XmlSerializer对象,用于将XML信息写入指定的ArrayBuffer或DataView内存中。
buffer是开发者根据需要自定义大小的缓冲区,用于临时存储生成的XML文本。在使用过程中必须确保缓冲区足以容纳生成的文本内容。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| buffer | ArrayBuffer | DataView | 是 | 用于接收写入XML信息的ArrayBuffer或DataView内存,需确保缓存区域足以容纳生成的文本内容。 |
| encoding | string | 否 | 编码格式,默认'utf-8'(目前仅支持'utf-8')。 |
示例:
let arrayBuffer = new ArrayBuffer(2048); let xmlSerializer = new xml.XmlSerializer(arrayBuffer, "utf-8");
setAttributes(name: string, value: string): void
添加元素的属性和属性值。
该接口必须在startElement之后调用,用于为当前已开启的元素设置属性。在元素开始标记写入之前调用此接口将产生无效XML。
该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。例如不允许添加数字开头的属性名称以及添加多个同名的属性名称。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | XML元素的属性名称。 |
| value | string | 是 | XML元素的属性值,与name参数指定的属性名对应。 |
示例:
import { util } from '@kit.ArkTS';
let arrayBuffer = new ArrayBuffer(2048);
let thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.startElement("note");
thatSer.setAttributes("importance", "high");
thatSer.endElement();
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result); // <note importance="high"/> addEmptyElement(name: string): void
添加一个空元素。
该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。例如不允许添加数字开头的元素名称。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 元素的名称,取值原则:不允许以数字开头。 |
示例:
import { util } from '@kit.ArkTS';
let arrayBuffer = new ArrayBuffer(2048);
let thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.addEmptyElement("d");
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result); // <d/> setDeclaration(): void
设置带有编码信息的文件声明,调用后将在XML文本中生成<?xml version="1.0" encoding="utf-8"?>格式的声明。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
示例:
import { util } from '@kit.ArkTS';
let arrayBuffer = new ArrayBuffer(2048);
let thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.setDeclaration();
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result);
// <?xml version="1.0" encoding="utf-8"?> startElement(name: string): void
根据给定名称添加元素开始标记。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 当前元素的元素名。 |
示例:
import { util } from '@kit.ArkTS';
let arrayBuffer = new ArrayBuffer(2048);
let thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.startElement("note");
thatSer.setText("Happy");
thatSer.endElement();
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result);
// <note>Happy</note> endElement(): void
添加元素结束标记。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
示例:
import { util } from '@kit.ArkTS';
let arrayBuffer = new ArrayBuffer(2048);
let thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.startElement("note");
thatSer.setText("Happy");
thatSer.endElement();
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result);
// <note>Happy</note> setNamespace(prefix: string, namespace: string): void
添加当前元素标记的命名空间,适用于需要在同一XML文档中区分来自不同词汇表或模式的元素的场景,如混合使用多个XML标准的文档。
该接口应在startElement之前调用,为即将开启的元素设置命名空间前缀。调用顺序:先调用setNamespace设置命名空间,再调用startElement开启元素。
该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。例如禁止添加数字开头的前缀以及为同一个元素设置多个命名空间。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| prefix | string | 是 | 当前元素及其子元素的前缀。 |
| namespace | string | 是 | 当前元素及其子元素的命名空间。 |
示例:
import { util } from '@kit.ArkTS';
let arrayBuffer = new ArrayBuffer(2048);
let thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.setNamespace("h", "http://www.w3.org/TR/html4/");
thatSer.startElement("note");
thatSer.endElement();
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result);
// <h:note xmlns:h="http://www.w3.org/TR/html4/"/> setComment(text: string): void
添加注释内容,所生成的注释结构为:<!-- + 注释内容 + -->。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| text | string | 是 | 当前元素的注释内容。 |
示例:
import { util } from '@kit.ArkTS';
let arrayBuffer = new ArrayBuffer(2048);
let thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.setComment("Hello, World!");
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result); // <!--Hello, World!--> setCDATA(text: string): void
提供在CDATA标签中添加数据的能力,适用于XML内容中包含特殊字符(如<、&等)需要原样保留而不被XML解析器处理的场景。所生成的CDATA标签结构为:<![CDATA[ + 所添加的数据 + ]]>。
该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。例如不允许在CDATA标签中添加包含"]]>"字符串的数据。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| text | string | 是 | CDATA标签中的数据内容。 |
示例:
import { util } from '@kit.ArkTS';
let arrayBuffer = new ArrayBuffer(2048);
let thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.setCDATA('root SYSTEM');
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result); // <![CDATA[root SYSTEM]]> setText(text: string): void
添加标签值,标签值将作为当前元素的文本内容,写入元素的开始标记与结束标记之间。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| text | string | 是 | XML元素的标签文本内容。 |
示例:
import { util } from '@kit.ArkTS';
let arrayBuffer = new ArrayBuffer(2048);
let thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.startElement("note");
thatSer.setAttributes("importance", "high");
thatSer.setText("Happy");
thatSer.endElement();
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result); // <note importance="high">Happy</note> setDocType(text: string): void
添加文档类型,调用后将在XML文本中生成<!DOCTYPE ...>格式的文档类型声明。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| text | string | 是 | 文档类型声明的内容。 |
示例:
import { util } from '@kit.ArkTS';
let arrayBuffer = new ArrayBuffer(2048);
let thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.setDocType('root SYSTEM "http://www.test.org/test.dtd"');
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result); // <!DOCTYPE root SYSTEM "http://www.test.org/test.dtd"> XmlDynamicSerializer类用于动态生成XML字符串。当无法确定XML内容长度时,推荐使用该类。
使用该类构造的对象无需自行创建ArrayBuffer,程序动态扩容,可以不断添加XML元素,最终序列化结果字符串长度上限为100000。
constructor(encoding?: string)
构造并返回一个XmlDynamicSerializer对象,该对象支持动态扩容生成XML字符串,无需预先指定缓存大小。
元服务API:从API version 20开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| encoding | string | 否 | 编码格式,默认'utf-8'(目前仅支持'utf-8')。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
| 错误码ID | 错误信息 |
|---|---|
| 10200066 | Incorrect encoding format, only support utf-8. |
示例:
let serializer = new xml.XmlDynamicSerializer('utf-8'); getOutput(): ArrayBuffer
返回XML字符串的ArrayBuffer。
元服务API:从API version 20开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
返回值:
| 类型 | 说明 |
|---|---|
| ArrayBuffer | 用于接收写入XML信息的ArrayBuffer内存。 |
示例:
import { util } from '@kit.ArkTS';
let serializer = new xml.XmlDynamicSerializer('utf-8');
serializer.startElement("note");
serializer.setText("Happy");
serializer.endElement();
let arr = serializer.getOutput();
let uint8 = new Uint8Array(arr);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result); // <note>Happy</note> setAttributes(name: string, value: string): void
写入元素的属性和属性值。
该接口必须在startElement20+之后调用,用于为当前已开启的元素设置属性。
该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。例如不允许添加数字开头的属性名称以及添加多个同名的属性名称。
元服务API:从API version 20开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 属性名。所组成的XML长度不能超过100000,不可为空字符。 |
| value | string | 是 | 属性值。所组成的XML长度不能超过100000字符。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
| 错误码ID | 错误信息 |
|---|---|
| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
| 10200063 | Illegal position for xml. |
| 10200064 | Cannot be an empty string. |
示例:
import { util } from '@kit.ArkTS';
let serializer = new xml.XmlDynamicSerializer('utf-8');
serializer.startElement("note");
serializer.setAttributes("importance", "high");
serializer.endElement();
let arrayBuffer = serializer.getOutput();
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result); // <note importance="high"/> addEmptyElement(name: string): void
写入一个空元素。
该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。例如不允许添加数字开头的元素名称。
元服务API:从API version 20开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 该空元素的元素名,所组成的XML长度不能超过100000。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
| 错误码ID | 错误信息 |
|---|---|
| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
| 10200064 | Cannot be an empty string. |
示例:
import { util } from '@kit.ArkTS';
let serializer = new xml.XmlDynamicSerializer('utf-8');
serializer.addEmptyElement("d");
let arrayBuffer = serializer.getOutput();
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result); // <d/> setDeclaration(): void
编写带有编码的文件声明,调用后将在XML文本中生成<?xml version="1.0" encoding="utf-8"?>格式的声明。
元服务API:从API version 20开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
| 错误码ID | 错误信息 |
|---|---|
| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
| 10200063 | Illegal position for xml. |
示例:
import { util } from '@kit.ArkTS';
let serializer = new xml.XmlDynamicSerializer('utf-8');
serializer.setDeclaration();
let arrayBuffer = serializer.getOutput();
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result); // <?xml version="1.0" encoding="utf-8"?> startElement(name: string): void
写入元素开始标记。
元服务API:从API version 20开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 当前元素的元素名。所组成的XML长度不能超过100000,不可为空字符。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
| 错误码ID | 错误信息 |
|---|---|
| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
| 10200064 | Cannot be an empty string. |
示例:
import { util } from '@kit.ArkTS';
let serializer = new xml.XmlDynamicSerializer('utf-8');
serializer.startElement("note");
serializer.setText("Happy");
serializer.endElement();
let arrayBuffer = serializer.getOutput();
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result); // <note>Happy</note> endElement(): void
写入元素结束标记。
元服务API:从API version 20开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
| 错误码ID | 错误信息 |
|---|---|
| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
| 10200065 | There is no match between the startElement and the endElement. |
示例:
import { util } from '@kit.ArkTS';
let serializer = new xml.XmlDynamicSerializer('utf-8');
serializer.startElement("note");
serializer.setText("Happy");
serializer.endElement();
let arrayBuffer = serializer.getOutput();
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result); // <note>Happy</note> setNamespace(prefix: string, namespace: string): void
写入当前元素标记的命名空间。
该接口应在startElement20+之前调用,为即将开启的元素设置命名空间前缀。调用顺序:先调用setNamespace设置命名空间,再调用startElement开启元素。
该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。例如不允许添加数字开头的前缀以及为同一个元素设置多个命名空间。
元服务API:从API version 20开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| prefix | string | 是 | 当前元素及其子元素的前缀。所组成的XML长度不能超过100000,不可为空字符串。 |
| namespace | string | 是 | 当前元素及其子元素的命名空间。所组成的XML长度不能超过100000,不可为空字符串。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
| 错误码ID | 错误信息 |
|---|---|
| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
| 10200064 | Cannot be an empty string. |
示例:
import { util } from '@kit.ArkTS';
let serializer = new xml.XmlDynamicSerializer('utf-8');
serializer.setNamespace("h", "http://www.w3.org/TR/html4/");
serializer.startElement("note");
serializer.endElement();
let arrayBuffer = serializer.getOutput();
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result); // <h:note xmlns:h="http://www.w3.org/TR/html4/"/> setComment(text: string): void
写入注释内容,所生成的注释结构为:<!-- + 注释内容 + -->。
元服务API:从API version 20开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| text | string | 是 | 当前元素的注释内容。所组成的XML长度不能超过100000,不可为空字符。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
| 错误码ID | 错误信息 |
|---|---|
| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
| 10200064 | Cannot be an empty string. |
示例:
import { util } from '@kit.ArkTS';
let serializer = new xml.XmlDynamicSerializer('utf-8');
serializer.setComment("Hello, World!");
let arrayBuffer = serializer.getOutput();
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result); // <!--Hello, World!--> setCdata(text: string): void
提供在CDATA标签中添加数据的能力,所生成的CDATA标签结构为:<![CDATA[ + 所添加的数据 + ]]>。
该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。例如不允许在CDATA标签中添加包含"]]>"字符串的数据。
元服务API:从API version 20开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| text | string | 是 | CDATA标签中的数据内容。所组成的XML长度不能超过100000。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
| 错误码ID | 错误信息 |
|---|---|
| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
| 10200064 | Cannot be an empty string. |
示例:
import { util } from '@kit.ArkTS';
let serializer = new xml.XmlDynamicSerializer('utf-8');
serializer.setCdata('root SYSTEM')
let arrayBuffer = serializer.getOutput();
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result); // <![CDATA[root SYSTEM]]> setText(text: string): void
写入标签值。
元服务API:从API version 20开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| text | string | 是 | 标签值。所组成的XML长度不能超过100000,不可为空字符。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
| 错误码ID | 错误信息 |
|---|---|
| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
| 10200064 | Cannot be an empty string. |
示例:
import { util } from '@kit.ArkTS';
let serializer = new xml.XmlDynamicSerializer('utf-8');
serializer.startElement("note");
serializer.setAttributes("importance", "high");
serializer.setText("Happy");
serializer.endElement();
let arrayBuffer = serializer.getOutput();
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result); // <note importance="high">Happy</note> setDocType(text: string): void
写入文档类型。
元服务API:从API version 20开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| text | string | 是 | 文档类型声明的内容。所组成的XML长度不能超过100000。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
| 错误码ID | 错误信息 |
|---|---|
| 10200062 | The cumulative length of xml has exceeded the upper limit 100000. |
| 10200064 | Cannot be an empty string. |
示例:
import { util } from '@kit.ArkTS';
let serializer = new xml.XmlDynamicSerializer('utf-8');
serializer.setDocType('root SYSTEM "http://www.test.org/test.dtd"');
let arrayBuffer = serializer.getOutput();
let uint8 = new Uint8Array(arrayBuffer);
let result = util.TextDecoder.create().decodeToString(uint8);
console.info(result); // <!DOCTYPE root SYSTEM "http://www.test.org/test.dtd"> constructor(buffer: ArrayBuffer | DataView, encoding?: string)
构造并返回一个XmlPullParser对象。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| buffer | ArrayBuffer | DataView | 是 | 用于解析的XML文本数据所在的ArrayBuffer或DataView内存。 |
| encoding | string | 否 | 编码格式,默认'utf-8'(目前仅支持'utf-8')。 |
示例:
import { util } from '@kit.ArkTS';
let strXml = '<title>Happy</title>'
let textEncoder = new util.TextEncoder();
let uint8Array = textEncoder.encodeInto(strXml);
let xmlParser = new xml.XmlPullParser(uint8Array.buffer as object as ArrayBuffer, 'UTF-8'); parseXml(option: ParseOptions): void
解析XML,调用后将根据ParseOptions中配置的回调函数触发相应的解析事件,通过回调函数传递标签、属性、文本等解析信息。
元服务API:从API version 14开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| option | ParseOptions | 是 | XML解析选项。 |
示例:
具体使用场景可参照解析XML标签和标签值和解析XML属性和属性值。
import { xml, util } from '@kit.ArkTS';
let strXml =
'<?xml version="1.0" encoding="utf-8"?>' +
'<note importance="high" logged="true">' +
' <title><![CDATA[测试\n测试]]></title>' +
'</note>';
let textEncoder = new util.TextEncoder();
let uint8 = textEncoder.encodeInto(strXml);
function onParseEvent(key: xml.EventType, value: xml.ParseInfo) {
if (key == xml.EventType.CDSECT) {
console.info(JSON.stringify(value.getText()));
}
return true;
}
let options: xml.ParseOptions = {supportDoctype: true, ignoreNameSpace: true, tokenValueCallbackFunction: onParseEvent}
let pullParser = new xml.XmlPullParser(uint8.buffer as object as ArrayBuffer);
pullParser.parseXml(options);
// "测试\n测试" parse(option: ParseOptions): void
该接口用于根据指定的解析选项解析XML文本。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| option | ParseOptions | 是 | XML解析选项。 |
示例:
import { util } from '@kit.ArkTS';
let strXml =
'<?xml version="1.0" encoding="utf-8"?>' +
'<note importance="high" logged="true">' +
'<company>John & Hans</company>' +
'<title>Happy</title>' +
'</note>';
let textEncoder = new util.TextEncoder();
let arrBuffer = textEncoder.encodeInto(strXml);
let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer, 'UTF-8');
let parseResult = '';
function func(name: string, value: string) {
parseResult = name + value;
console.info(parseResult);
return true;
}
let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tagValueCallbackFunction:func}
that.parse(options);
// note
// company
// John & Hans
// company
// title
// Happy
// title
// note type AttributeWithTagCb = (tagName: string, key: string, value: string) => boolean
元服务API:从API version 20开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tagName | string | 是 | 标签名称。 |
| key | string | 是 | 属性名称。 |
| value | string | 是 | 属性的值。 |
返回值:
| 类型 | 说明 |
|---|---|
| boolean | 是否继续解析标签名称、属性名称及属性的值。true表示继续解析,false表示停止解析。 |
XML解析选项,用于配置XmlPullParser的解析行为。开发者可通过supportDoctype和ignoreNameSpace控制解析范围,通过注册回调函数(tagValueCallbackFunction、attributeValueCallbackFunction、tokenValueCallbackFunction等)接收不同类型的解析事件。
系统能力: SystemCapability.Utils.Lang
| 名称 | 类型 | 只读 | 可选 | 说明 |
|---|---|---|---|---|
| supportDoctype | boolean | 否 | 是 | 是否解析文档类型,false表示不解析文档类型,true表示解析文档类型,默认值为false。 元服务API:从API version 11开始,该接口支持在元服务中使用。 |
| ignoreNameSpace | boolean | 否 | 是 | 是否忽略命名空间,忽略命名空间后,将不会对其进行解析。true表示忽略命名空间,false表示不忽略命名空间,默认值为false。 元服务API:从API version 11开始,该接口支持在元服务中使用。 |
| tagValueCallbackFunction | (name: string, value: string) => boolean | 否 | 是 | 解析开始标签、标签值和结束标签,返回true表示继续解析,返回false表示停止解析,默认值为undefined,表示不解析。 元服务API:从API version 11开始,该接口支持在元服务中使用。 |
| attributeValueCallbackFunction | (name: string, value: string) => boolean | 否 | 是 | 解析属性和属性值,返回true表示继续解析,返回false表示停止解析,默认值为undefined,表示不解析。 元服务API:从API version 11开始,该接口支持在元服务中使用。 |
| tokenValueCallbackFunction | (eventType: EventType, value: ParseInfo) => boolean | 否 | 是 | 解析元素事件类型(EventType)和ParseInfo属性,默认值为undefined,表示不解析。 元服务API:从API version 11开始,该接口支持在元服务中使用。 |
| attributeWithTagCallbackFunction20+ | AttributeWithTagCb | 否 | 是 | 解析标签名称、属性名称及属性的值,默认值为undefined,表示不执行解析。 元服务API:从API version 20开始,该接口支持在元服务中使用。 |
getColumnNumber(): number
获取当前列号,从1开始计数。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
返回值:
| 类型 | 说明 |
|---|---|
| number | 当前元素的列号(从1开始),用于定位XML解析位置。 |
示例:
import { util } from '@kit.ArkTS';
let strXml = '<?xml version="1.0" encoding="utf-8"?><note>Happy</note>';
let textEncoder = new util.TextEncoder();
let arrBuffer = textEncoder.encodeInto(strXml);
let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
let str = "";
function func(key: xml.EventType, value: xml.ParseInfo) {
str += 'key:' + key + ' value:' + value.getColumnNumber() + ' ';
return true; // 决定是否继续解析,用于继续或终止解析。
}
let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
that.parseXml(options);
console.info(str);
// key:0 value:1 key:2 value:45 key:4 value:50 key:3 value:57 key:1 value:57 getDepth(): number
获取元素的当前深度。
标签内的空白事件深度与标签的深度保持一致。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
返回值:
| 类型 | 说明 |
|---|---|
| number | 元素的嵌套深度(从0开始),用于判断XML层级结构。 |
示例:
import { util } from '@kit.ArkTS';
let strXml =
'<?xml version="1.0" encoding="utf-8"?>' +
'<note importance="high">' +
'<title>Happy</title>' +
'</note>';
let textEncoder = new util.TextEncoder();
let arrBuffer = textEncoder.encodeInto(strXml);
let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
let str = "";
function func(key: xml.EventType, value: xml.ParseInfo) {
str += 'key:' + key + ' value:' + value.getDepth() + ' ';
return true; // 决定是否继续解析,用于继续或终止解析。
}
let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
that.parseXml(options);
console.info(str);
// 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 getLineNumber(): number
获取当前行号,从1开始。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
返回值:
| 类型 | 说明 |
|---|---|
| number | 当前元素的行号(从1开始),用于定位XML解析位置。 |
示例:
import { util } from '@kit.ArkTS';
let strXml = '<?xml version="1.0" encoding="utf-8"?><note>Work</note>';
let textEncoder = new util.TextEncoder();
let arrBuffer = textEncoder.encodeInto(strXml);
let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
let str = "";
function func(key: xml.EventType, value: xml.ParseInfo) {
str += 'key:' + key + ' value:' + value.getLineNumber() + ' ';
return true; // 决定是否继续解析,用于继续或终止解析。
}
let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
that.parseXml(options);
console.info(str);
// key:0 value:1 key:2 value:1 key:4 value:1 key:3 value:1 key:1 value:1 getName(): string
获取当前元素名称。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
返回值:
| 类型 | 说明 |
|---|---|
| string | 当前元素的名称(不包含命名空间前缀),用于标识XML元素。 |
示例:
import { util } from '@kit.ArkTS';
let strXml = '<?xml version="1.0" encoding="utf-8"?><note>Happy</note>';
let textEncoder = new util.TextEncoder();
let arrBuffer = textEncoder.encodeInto(strXml);
let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
let str = "";
function func(key: xml.EventType, value: xml.ParseInfo) {
str += 'key:' + key + ' value:' + value.getName() + ' ';
return true; // 决定是否继续解析,用于继续或终止解析。
}
let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
that.parseXml(options);
console.info(str);
// key:0 value: key:2 value:note key:4 value: key:3 value:note key:1 value: getNamespace(): string
获取当前元素的命名空间。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
返回值:
| 类型 | 说明 |
|---|---|
| string | 返回当前元素的命名空间。 |
示例:
import { util } from '@kit.ArkTS';
let strXml =
'<?xml version="1.0" encoding="utf-8"?>' +
'<note xmlns:h="http://www.w3.org">' +
'<h:title>Happy</h:title>' +
'</note>';
let textEncoder = new util.TextEncoder();
let arrBuffer = textEncoder.encodeInto(strXml);
let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
let str = "";
function func(key: xml.EventType, value: xml.ParseInfo) {
str += 'key:' + key + ' value:' + value.getNamespace() + ' ';
return true; // 决定是否继续解析,用于继续或终止解析。
}
let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:false, tokenValueCallbackFunction:func}
that.parseXml(options);
console.info(str);
// 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: getPrefix(): string
获取当前元素的命名空间前缀。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
返回值:
| 类型 | 说明 |
|---|---|
| string | 返回当前元素的命名空间前缀,如果元素没有命名空间前缀则返回空字符串。 |
示例:
import { util } from '@kit.ArkTS';
let strXml =
'<?xml version="1.0" encoding="utf-8"?>' +
'<note xmlns:h="http://www.w3.org/TR/html4">' +
'<h:title>Happy</h:title>' +
'</note>';
let textEncoder = new util.TextEncoder();
let arrBuffer = textEncoder.encodeInto(strXml);
let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
let str = "";
function func(key: xml.EventType, value: xml.ParseInfo) {
str += 'key:' + key + ' value:' + value.getPrefix() + ' ';
return true; // 决定是否继续解析,用于继续或终止解析。
}
let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:false, tokenValueCallbackFunction:func}
that.parseXml(options);
console.info(str);
// key:0 value: key:2 value: key:2 value:h key:4 value: key:3 value:h key:3 value: key:1 value: getText(): string
获取当前事件的文本内容。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
返回值:
| 类型 | 说明 |
|---|---|
| string | 当前事件的文本内容(如标签值、注释等),用于获取解析的XML数据。 |
示例:
import { util } from '@kit.ArkTS';
let strXml = '<?xml version="1.0" encoding="utf-8"?><note>Happy</note>';
let textEncoder = new util.TextEncoder();
let arrBuffer = textEncoder.encodeInto(strXml);
let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
let str = "";
function func(key: xml.EventType, value: xml.ParseInfo) {
str += 'key:' + key + ' value:' + value.getText() + ' ';
return true; // 决定是否继续解析,用于继续或终止解析。
}
let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
that.parseXml(options);
console.info(str);
// key:0 value: key:2 value: key:4 value:Happy key:3 value: key:1 value: isEmptyElementTag(): boolean
判断当前元素是否为空元素。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
返回值:
| 类型 | 说明 |
|---|---|
| boolean | 返回true,表示当前元素为空元素。返回false,表示当前元素为非空元素。 |
示例:
import { util } from '@kit.ArkTS';
let strXml =
'<?xml version="1.0" encoding="utf-8"?>' +
'<note importance="high" logged="true">' +
'<title/>' +
'</note>';
let textEncoder = new util.TextEncoder();
let arrBuffer = textEncoder.encodeInto(strXml);
let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
let str = "";
function func(key: xml.EventType, value: xml.ParseInfo) {
str += 'key:' + key + ' value:' + value.isEmptyElementTag() + ' ';
return true; // 决定是否继续解析,用于继续或终止解析。
}
let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
that.parseXml(options);
console.info(str);
// key:0 value:false key:2 value:false key:2 value:true key:3 value:false key:3 value:false key:1 value:false isWhitespace(): boolean
判断当前事件是否只包含空格字符。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
返回值:
| 类型 | 说明 |
|---|---|
| boolean | 返回true,表示当前文本事件仅包含空格字符。返回false,表示当前文本事件包含非空格字符。 |
示例:
import { util } from '@kit.ArkTS';
let strXml =
'<?xml version="1.0" encoding="utf-8"?>' +
'<note importance="high" logged="true">' +
'<title> </title>' +
'</note>';
let textEncoder = new util.TextEncoder();
let arrBuffer = textEncoder.encodeInto(strXml);
let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
let str = "";
function func(key: xml.EventType, value: xml.ParseInfo) {
str += 'key:' + key + ' value:' + value.isWhitespace() + ' ';
return true; // 决定是否继续解析,用于继续或终止解析。
}
let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
that.parseXml(options);
console.info(str);
// 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 getAttributeCount(): number
获取当前开始标记的属性数量。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
返回值:
| 类型 | 说明 |
|---|---|
| number | 当前开始标记的属性数量,用于遍历和处理XML属性。 |
示例:
import { util } from '@kit.ArkTS';
let strXml = '<?xml version="1.0" encoding="utf-8"?><note importance="high" logged="true"/>';
let textEncoder = new util.TextEncoder();
let arrBuffer = textEncoder.encodeInto(strXml);
let that = new xml.XmlPullParser(arrBuffer.buffer as object as ArrayBuffer);
let str = "";
function func(key: xml.EventType, value: xml.ParseInfo) {
str += 'key:' + key + ' value:' + value.getAttributeCount() + ' ';
return true; // 决定是否继续解析,用于继续或终止解析。
}
let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
that.parseXml(options);
console.info(str);
// key:0 value:0 key:2 value:2 key:3 value:2 key:1 value:0 事件类型枚举,定义了XmlPullParser在解析XML过程中可能触发的各类事件。解析时事件按START_DOCUMENT→START_TAG→TEXT/CDSECT→END_TAG→END_DOCUMENT等顺序依次触发,开发者可通过tokenValueCallbackFunction回调接收对应事件。
元服务API:从API version 11开始,该接口支持在元服务中使用。
系统能力: SystemCapability.Utils.Lang
| 名称 | 值 | 说明 |
|---|---|---|
| START_DOCUMENT | 0 | 启动文件事件。 |
| END_DOCUMENT | 1 | 结束文件事件。 |
| START_TAG | 2 | 启动标签事件。 |
| END_TAG | 3 | 结束标签事件。 |
| TEXT | 4 | 文本事件。 |
| CDSECT | 5 | CDATA事件。 |
| COMMENT | 6 | XML注释事件。 |
| DOCDECL | 7 | XML文档类型声明事件。 |
| INSTRUCTION | 8 | XML处理指令声明事件。 |
| ENTITY_REFERENCE | 9 | 实体引用事件。 |
| WHITESPACE | 10 | 空白事件。 |
XmlSAXParser类用于以流式方式解析XML文本。适用于需要边读取边处理的场景,支持从stream.Readable 流中读取XML数据并进行解析。
constructor(inputStream: stream.Readable, encoding?: string)
构造并返回一个XmlSAXParser对象,用于以SAX方式从可读流中流式解析XML文本。
元服务API:从API version 24开始,该接口支持在元服务中使用。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| inputStream | stream.Readable | 是 | 用于读取XML数据的可读流实例。 |
| encoding | string | 否 | 编码格式,默认为'utf-8'(目前仅支持'utf-8')。 |
示例:
import { xml, stream } from '@kit.ArkTS';
class TestReadable extends stream.Readable {
constructor() {
super();
}
doRead(size: number) {
}
}
let readableStream = new TestReadable();
let saxParser = new xml.XmlSAXParser(readableStream, 'utf-8'); parse(xmlSAXHandler: XmlSAXHandler): void
使用SAX(Simple API for XML)方式解析XML数据。
元服务API:从API version 24开始,该接口支持在元服务中使用。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| xmlSAXHandler | XmlSAXHandler | 是 | SAX处理器对象。 |
示例:
import { xml, stream } from '@kit.ArkTS';
class TestReadable extends stream.Readable {
constructor() {
super();
}
doRead(size: number) {
}
}
let readableStream = new TestReadable();
let saxParser = new xml.XmlSAXParser(readableStream);
let handler: xml.XmlSAXHandler = {
startDocument: () => {
},
endDocument: () => {
},
startElement: (elementName: string, namespaceURI: string | undefined, qName: string | undefined,
attributes: Map<string, string>) => {
},
endElement: (elementName: string, namespaceURI: string | undefined, qName: string | undefined) => {
},
characters: (content: string) => {
}
};
saxParser.parse(handler); XmlSAXHandler定义了SAX解析XML文本时的回调方法。开发者需要实现这些回调方法来处理XML文本的不同部分。这些回调方法会在XML解析过程的对应时机触发。startDocument会在开始解析文档时触发,endDocument会在结束文档解析时触发,startElement会在开始解析元素时触发,endElement会在结束解析元素时触发,characters则会在解析元素间文本内容时触发。
startDocument(): void
当解析器在XML文本开始解析时触发的回调函数。该回调函数需要开发者自行实现。具体使用示例可见characters24+。
元服务API:从API version 24开始,该接口支持在元服务中使用。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.Utils.Lang
endDocument(): void
当解析器在XML文本结束解析时触发的回调函数。该回调函数需要开发者自行实现。具体使用示例可见characters24+。
当可读流结束时触发此回调。在stream中调用push(),传入null值,从而触发该回调。
元服务API:从API version 24开始,该接口支持在元服务中使用。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.Utils.Lang
startElement(elementName: string, namespaceURI: string | undefined, qName: string | undefined, attributes: Map<string, string>): void
当解析器遇到XML元素的开始标签时触发的回调函数。该回调函数需要开发者自行实现。具体使用示例可见characters24+。
元服务API:从API version 24开始,该接口支持在元服务中使用。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| elementName | string | 是 | 解析器回传的元素名称(不包含命名空间前缀)。例如,对于<ns2:child>,elementName为"child"。 |
| namespaceURI | string | undefined | 是 | 解析器回传的命名空间URI。例如,对于xmlns:ns2="http://example.com/ns2",namespaceURI为"http://example.com/ns2"。如果元素没有命名空间则为undefined。 |
| qName | string | undefined | 是 | 解析器回传的元素限定名(包含命名空间前缀)。例如,对于<ns2:child>,qName为"ns2:child"。如果元素没有命名空间则qName为undefined。 |
| attributes | Map<string, string> | 是 | 解析器回传的元素的属性映射表,键为属性名(可能包含命名空间前缀,如"ns2:attrA"),值为属性值。 |
endElement(elementName: string, namespaceURI: string | undefined, qName: string | undefined): void
当解析器遇到XML元素的结束标签时触发的回调函数。该回调函数需要开发者自行实现。具体使用示例可见characters24+。
元服务API:从API version 24开始,该接口支持在元服务中使用。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| elementName | string | 是 | 解析器回传的元素名称(不包含命名空间前缀)。例如,对于<ns2:child>,elementName为"child"。 |
| namespaceURI | string | undefined | 是 | 解析器回传的命名空间URI。例如,对于xmlns:ns2="http://example.com/ns2",namespaceURI为"http://example.com/ns2"。如果元素没有命名空间则为undefined。 |
| qName | string | undefined | 是 | 解析器回传的元素限定名(包含命名空间前缀)。例如,对于<ns2:child>,qName为"ns2:child"。如果元素没有命名空间则qName为undefined。 |
characters(content: string): void
当解析器在XML元素内部遇到文本内容时调用的回调函数。该回调函数需要开发者自行实现。
元服务API:从API version 24开始,该接口支持在元服务中使用。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.Utils.Lang
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| content | string | 是 | 解析器回传元素中的文本内容。 |
示例:
import { xml, stream } from '@kit.ArkTS';
class TestReadable extends stream.Readable {
constructor() {
super();
}
doRead(size: number) {
}
}
const saxHandler: xml.XmlSAXHandler = {
startDocument() {
console.info("startDocument");
},
endDocument() {
console.info("endDocument");
},
startElement(elementName: string, namespaceURI: string | undefined, qName: string | undefined,
attributes: Map<string, string>) {
console.info("startElement elementName:", elementName);
console.info("startElement namespaceURI:", namespaceURI);
console.info("startElement qName:", qName);
if (attributes) {
attributes.forEach((value, key) => {
console.info("startElement attribute:", key, "=", value);
});
}
},
endElement(elementName: string, namespaceURI: string | undefined, qName: string | undefined) {
console.info("endElement elementName:", elementName);
},
characters(content: string) {
console.info("characters:", content);
}
};
let readableStream = new TestReadable();
let saxParser = new xml.XmlSAXParser(readableStream);
saxParser.parse(saxHandler);
let testData = '<?xml version="1.0" encoding="UTF-8"?>\n' +
'<root xmlns:ns1="http://example.com/ns1">\n' +
' <ns1:child ns1:attr1="value1" attr2="value2">Text content</ns1:child>\n' +
'</root>';
readableStream.push(testData);
readableStream.push(null);
// 输出示例:
// startDocument
// startElement elementName: root
// startElement namespaceURI: undefined
// startElement qName: undefined
// characters:
//
// startElement elementName: child
// startElement namespaceURI: http://example.com/ns1
// startElement qName: ns1:child
// startElement attribute: attr2 = value2
// startElement attribute: ns1:attr1 = value1
// characters: Text content
// endElement elementName: child
// characters:
// endElement elementName: root
// endDocument