1# @ohos.xml (xml解析与生成) 2 3本模块提供了将XML文本转换为JavaScript对象、以及XML文件生成和解析的一系列接口。 4 5> **说明:** 6> 7> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8 9 10## 导入模块 11 12``` 13import { xml } from '@kit.ArkTS'; 14``` 15 16## XmlSerializer 17 18XmlSerializer接口用于生成XML文件。 19 20### constructor 21 22constructor(buffer: ArrayBuffer | DataView, encoding?: string) 23 24XmlSerializer的构造函数。 25 26> **说明:** 27> 28> buffer是一个用户根据需要自定义大小的缓存区域,用于临时存储生成的XML文本。在使用过程中务必确保所设置的缓存区足够大,使其可以容纳生成文本的所有内容。 29 30**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 31 32**系统能力:** SystemCapability.Utils.Lang 33 34**参数:** 35 36| 参数名 | 类型 | 必填 | 说明 | 37| -------- | --------------------------------- | ---- | ------------------------------------------------ | 38| buffer | ArrayBuffer \| DataView | 是 | 用于接收写入xml信息的ArrayBuffer或DataView内存。 | 39| encoding | string | 否 | 编码格式 , 默认'utf-8'(目前仅支持'utf-8')。 | 40 41**错误码:** 42 43以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 44 45| 错误码ID | 错误信息 | 46| -------- | -------- | 47| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 48 49**示例:** 50 51```ts 52let arrayBuffer = new ArrayBuffer(2048); 53let thatSer = new xml.XmlSerializer(arrayBuffer, "utf-8"); 54``` 55 56### setAttributes 57 58setAttributes(name: string, value: string): void 59 60写入元素的属性和属性值。 61 62> **说明:** 63> 64> 该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。比如不允许添加数字开头的属性名称以及添加多个同名的属性名称。 65 66**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 67 68**系统能力:** SystemCapability.Utils.Lang 69 70**参数:** 71 72| 参数名 | 类型 | 必填 | 说明 | 73| ------ | ------ | ---- | --------------- | 74| name | string | 是 | 属性。 | 75| value | string | 是 | 属性值。 | 76 77**错误码:** 78 79以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 80 81| 错误码ID | 错误信息 | 82| -------- | -------- | 83| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 84 85**示例:** 86 87```ts 88import { util } from '@kit.ArkTS'; 89 90let arrayBuffer = new ArrayBuffer(2048); 91let thatSer = new xml.XmlSerializer(arrayBuffer); 92thatSer.startElement("note"); 93thatSer.setAttributes("importance", "high"); 94thatSer.endElement(); 95let uint8 = new Uint8Array(arrayBuffer); 96let result = util.TextDecoder.create().decodeToString(uint8); 97console.log(result); // <note importance="high"/> 98``` 99 100### addEmptyElement 101 102addEmptyElement(name: string): void 103 104写入一个空元素。 105 106> **说明:** 107> 108> 该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。比如不允许添加数字开头的元素名称。 109 110**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 111 112**系统能力:** SystemCapability.Utils.Lang 113 114**参数:** 115 116| 参数名 | 类型 | 必填 | 说明 | 117| ------ | ------ | ---- | ------------------ | 118| name | string | 是 | 该空元素的元素名。 | 119 120**错误码:** 121 122以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 123 124| 错误码ID | 错误信息 | 125| -------- | -------- | 126| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 127 128**示例:** 129 130```ts 131import { util } from '@kit.ArkTS'; 132 133let arrayBuffer = new ArrayBuffer(2048); 134let thatSer = new xml.XmlSerializer(arrayBuffer); 135thatSer.addEmptyElement("d"); 136let uint8 = new Uint8Array(arrayBuffer); 137let result = util.TextDecoder.create().decodeToString(uint8); 138console.log(result); // <d/> 139``` 140 141### setDeclaration 142 143setDeclaration(): void 144 145编写带有编码的文件声明。 146 147**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 148 149**系统能力:** SystemCapability.Utils.Lang 150 151**示例:** 152 153```ts 154import { util } from '@kit.ArkTS'; 155 156let arrayBuffer = new ArrayBuffer(2048); 157let thatSer = new xml.XmlSerializer(arrayBuffer); 158thatSer.setDeclaration(); 159let uint8 = new Uint8Array(arrayBuffer); 160let result = util.TextDecoder.create().decodeToString(uint8); 161console.log(result); 162// <?xml version="1.0" encoding="utf-8"?> 163``` 164 165### startElement 166 167startElement(name: string): void 168 169根据给定名称写入元素开始标记。 170 171> **说明:** 172> 173>- 调用该接口后须调用[endElement](#endelement)写入元素结束标记,以确保节点正确闭合。 174> 175>- 该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。比如不允许添加数字开头的元素名称。 176 177**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 178 179**系统能力:** SystemCapability.Utils.Lang 180 181**参数:** 182 183| 参数名 | 类型 | 必填 | 说明 | 184| ------ | ------ | ---- | ------------------ | 185| name | string | 是 | 当前元素的元素名。 | 186 187**错误码:** 188 189以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 190 191| 错误码ID | 错误信息 | 192| -------- | -------- | 193| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 194 195**示例:** 196 197```ts 198import { util } from '@kit.ArkTS'; 199 200let arrayBuffer = new ArrayBuffer(2048); 201let thatSer = new xml.XmlSerializer(arrayBuffer); 202thatSer.startElement("note"); 203thatSer.setText("Happy"); 204thatSer.endElement(); 205let uint8 = new Uint8Array(arrayBuffer); 206let result = util.TextDecoder.create().decodeToString(uint8); 207console.log(result); 208// <note>Happy</note> 209``` 210 211### endElement 212 213endElement(): void 214 215写入元素结束标记。 216 217> **说明:** 218> 219> 调用该接口前必须先调用[startElement](#startelement)接口写入元素开始标记。 220 221**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 222 223**系统能力:** SystemCapability.Utils.Lang 224 225**示例:** 226 227```ts 228import { util } from '@kit.ArkTS'; 229 230let arrayBuffer = new ArrayBuffer(2048); 231let thatSer = new xml.XmlSerializer(arrayBuffer); 232thatSer.startElement("note"); 233thatSer.setText("Happy"); 234thatSer.endElement(); 235let uint8 = new Uint8Array(arrayBuffer); 236let result = util.TextDecoder.create().decodeToString(uint8); 237console.log(result); 238// <note>Happy</note> 239``` 240 241### setNamespace 242 243setNamespace(prefix: string, namespace: string): void 244 245写入当前元素标记的命名空间。 246 247> **说明:** 248> 249> 该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。比如不允许添加数字开头的前缀以及对同一个元素设置多个命名空间。 250 251**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 252 253**系统能力:** SystemCapability.Utils.Lang 254 255**参数:** 256 257| 参数名 | 类型 | 必填 | 说明 | 258| --------- | ------ | ---- | ------------------------------ | 259| prefix | string | 是 | 当前元素及其子元素的前缀。 | 260| namespace | string | 是 | 当前元素及其子元素的命名空间。 | 261 262**错误码:** 263 264以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 265 266| 错误码ID | 错误信息 | 267| -------- | -------- | 268| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 269 270**示例:** 271 272```ts 273import { util } from '@kit.ArkTS'; 274 275let arrayBuffer = new ArrayBuffer(2048); 276let thatSer = new xml.XmlSerializer(arrayBuffer); 277thatSer.setNamespace("h", "http://www.w3.org/TR/html4/"); 278thatSer.startElement("note"); 279thatSer.endElement(); 280let uint8 = new Uint8Array(arrayBuffer); 281let result = util.TextDecoder.create().decodeToString(uint8); 282console.log(result); 283// <h:note xmlns:h="http://www.w3.org/TR/html4/"/> 284``` 285 286### setComment 287 288setComment(text: string): void 289 290写入注释内容。 291 292**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 293 294**系统能力:** SystemCapability.Utils.Lang 295 296**参数:** 297 298| 参数名 | 类型 | 必填 | 说明 | 299| ------ | ------ | ---- | -------------------- | 300| text | string | 是 | 当前元素的注释内容。 | 301 302**错误码:** 303 304以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 305 306| 错误码ID | 错误信息 | 307| -------- | -------- | 308| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 309 310**示例:** 311 312```ts 313import { util } from '@kit.ArkTS'; 314 315let arrayBuffer = new ArrayBuffer(2048); 316let thatSer = new xml.XmlSerializer(arrayBuffer); 317thatSer.setComment("Hello, World!"); 318let uint8 = new Uint8Array(arrayBuffer); 319let result = util.TextDecoder.create().decodeToString(uint8); 320console.log(result); // <!--Hello, World!--> 321``` 322 323### setCDATA 324 325setCDATA(text: string): void 326 327提供在CDATA标签中添加数据的能力,所生成的CDATA标签结构为:"\<!\[CDATA\[" + 所添加的数据 + "\]\]\>"。 328 329> **说明:** 330> 331> 该接口对所添加数据不做标准XML校验处理,请确保所添加的数据符合标准XML规范。比如不允许在CDATA标签中添加包含"\]\]\>"字符串的数据。 332 333**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 334 335**系统能力:** SystemCapability.Utils.Lang 336 337**参数:** 338 339| 参数名 | 类型 | 必填 | 说明 | 340| ------ | ------ | ---- | ----------------- | 341| text | string | 是 | CDATA属性的内容。 | 342 343**错误码:** 344 345以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 346 347| 错误码ID | 错误信息 | 348| -------- | -------- | 349| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 350 351**示例:** 352 353```ts 354import { util } from '@kit.ArkTS'; 355 356let arrayBuffer = new ArrayBuffer(2048); 357let thatSer = new xml.XmlSerializer(arrayBuffer); 358thatSer.setCDATA('root SYSTEM') 359let uint8 = new Uint8Array(arrayBuffer); 360let result = util.TextDecoder.create().decodeToString(uint8); 361console.log(result); // <![CDATA[root SYSTEM]]> 362``` 363 364### setText 365 366setText(text: string): void 367 368写入标签值。 369 370**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 371 372**系统能力:** SystemCapability.Utils.Lang 373 374**参数:** 375 376| 参数名 | 类型 | 必填 | 说明 | 377| ------ | ------ | ---- | ---------------- | 378| text | string | 是 | text属性的内容。 | 379 380**错误码:** 381 382以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 383 384| 错误码ID | 错误信息 | 385| -------- | -------- | 386| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 387 388**示例:** 389 390```ts 391import { util } from '@kit.ArkTS'; 392 393let arrayBuffer = new ArrayBuffer(2048); 394let thatSer = new xml.XmlSerializer(arrayBuffer); 395thatSer.startElement("note"); 396thatSer.setAttributes("importance", "high"); 397thatSer.setText("Happy"); 398thatSer.endElement(); 399let uint8 = new Uint8Array(arrayBuffer); 400let result = util.TextDecoder.create().decodeToString(uint8); 401console.log(result); // <note importance="high">Happy</note> 402``` 403 404### setDocType 405 406setDocType(text: string): void 407 408写入文档类型。 409 410**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 411 412**系统能力:** SystemCapability.Utils.Lang 413 414**参数:** 415 416| 参数名 | 类型 | 必填 | 说明 | 417| ------ | ------ | ---- | ------------------- | 418| text | string | 是 | DocType属性的内容。 | 419 420**错误码:** 421 422以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 423 424| 错误码ID | 错误信息 | 425| -------- | -------- | 426| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 427 428**示例:** 429 430```ts 431import { util } from '@kit.ArkTS'; 432 433let arrayBuffer = new ArrayBuffer(2048); 434let thatSer = new xml.XmlSerializer(arrayBuffer); 435thatSer.setDocType('root SYSTEM "http://www.test.org/test.dtd"'); 436let uint8 = new Uint8Array(arrayBuffer); 437let result = util.TextDecoder.create().decodeToString(uint8); 438console.log(result); // <!DOCTYPE root SYSTEM "http://www.test.org/test.dtd"> 439``` 440 441## XmlPullParser 442 443XmlPullParser接口用于解析现有的XML文件。 444 445### constructor 446 447constructor(buffer: ArrayBuffer | DataView, encoding?: string) 448 449构造并返回一个XmlPullParser对象。 450 451**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 452 453**系统能力:** SystemCapability.Utils.Lang 454 455**参数:** 456 457| 参数名 | 类型 | 必填 | 说明 | 458| -------- | --------------------------------- | ---- | ------------------------------------------ | 459| buffer | ArrayBuffer \| DataView | 是 | 需要解析的xml文本信息。 | 460| encoding | string | 否 | 编码格式 , 默认'utf-8'(目前仅支持'utf-8')。 | 461 462**错误码:** 463 464以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 465 466| 错误码ID | 错误信息 | 467| -------- | -------- | 468| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 469 470**示例:** 471 472```ts 473import { util } from '@kit.ArkTS'; 474 475let strXml = '<title>Happy</title>' 476let textEncoder = new util.TextEncoder(); 477let arrbuffer = textEncoder.encodeInto(strXml); 478let that = new xml.XmlPullParser(arrbuffer.buffer as object as ArrayBuffer, 'UTF-8'); 479``` 480 481### parse 482 483parse(option: ParseOptions): void 484 485该接口用于解析xml。 486 487**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 488 489**系统能力:** SystemCapability.Utils.Lang 490 491**参数:** 492 493| 参数名 | 类型 | 必填 | 说明 | 494| ------ | ----------------------------- | ---- | -------------------------------- | 495| option | [ParseOptions](#parseoptions) | 是 | 用户控制以及获取解析信息的选项。 | 496 497**错误码:** 498 499以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 500 501| 错误码ID | 错误信息 | 502| -------- | -------- | 503| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. | 504 505**示例:** 506 507```ts 508import { util } from '@kit.ArkTS'; 509 510let strXml = 511 '<?xml version="1.0" encoding="utf-8"?>' + 512 '<note importance="high" logged="true">' + 513 '<company>John & Hans</company>' + 514 '<title>Happy</title>' + 515 '</note>'; 516let textEncoder = new util.TextEncoder(); 517let arrbuffer = textEncoder.encodeInto(strXml); 518let that = new xml.XmlPullParser(arrbuffer.buffer as object as ArrayBuffer, 'UTF-8'); 519let str = ''; 520function func(name: string, value: string) { 521 str = name + value; 522 console.log(str); 523 return true; 524} 525let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tagValueCallbackFunction:func} 526that.parse(options); 527// note 528// company 529// John & Hans 530// company 531// title 532// Happy 533// title 534// note 535``` 536 537## ParseOptions 538 539xml解析选项。 540 541**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 542 543**系统能力:** 以下各项对应的系统能力均为SystemCapability.Utils.Lang 544 545 546| 名称 | 类型 | 必填 | 说明 | 547| ------------------------------ | ------------------------------------------------------------ | ---- | --------------------------------------- | 548| supportDoctype | boolean | 否 | 是否忽略文档类型,默认false,表示不解析文档类型。 | 549| ignoreNameSpace | boolean | 否 | 是否忽略命名空间,默认false,表示解析命名空间。 | 550| tagValueCallbackFunction | (name: string, value: string) => boolean | 否 | 获取tagValue回调函数,解析标签和标签值,默认undefined,表示不解析标签和标签值。 | 551| attributeValueCallbackFunction | (name: string, value: string) => boolean | 否 | 获取attributeValue回调函数,解析属性和属性值,默认undefined,表示不解析属性和属性值。 | 552| tokenValueCallbackFunction | (eventType: [EventType](#eventtype), value: [ParseInfo](#parseinfo)) => boolean | 否 | 获取tokenValue回调函数,,解析元素事件类型([EventType](#eventtype))和[ParseInfo](#parseinfo)属性,默认undefined,表示不解析元素事件类型和ParseInfo属性。 | 553 554## ParseInfo 555 556当前xml解析信息。 557 558 559### getColumnNumber 560 561getColumnNumber(): number 562 563获取当前列号,从1开始。 564 565**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 566 567**系统能力:** SystemCapability.Utils.Lang 568 569**返回值:** 570 571| 类型 | 说明 | 572| ------ | -------------- | 573| number | 返回当前列号。 | 574 575**示例:** 576 577```ts 578import { util } from '@kit.ArkTS'; 579 580let strXml = '<?xml version="1.0" encoding="utf-8"?><note>Happy</note>'; 581let textEncoder = new util.TextEncoder(); 582let arrbuffer = textEncoder.encodeInto(strXml); 583let that = new xml.XmlPullParser(arrbuffer.buffer as object as ArrayBuffer); 584let str = ""; 585function func(key: xml.EventType, value: xml.ParseInfo) { 586 str += 'key:' + key + ' value:' + value.getColumnNumber() + ' '; 587 return true; // Determines whether to continually parse, which is used to continue or terminate parsing. 588} 589let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func} 590that.parse(options); 591console.log(str); 592// key:0 value:1 key:2 value:45 key:4 value:50 key:3 value:57 key:1 value:57 593``` 594 595### getDepth 596 597getDepth(): number 598 599获取元素的当前深度。 600 601> **说明:** 602> 603> 标签内的空白事件深度与标签的深度保持一致。 604 605**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 606 607**系统能力:** SystemCapability.Utils.Lang 608 609**返回值:** 610 611| 类型 | 说明 | 612| ------ | -------------------- | 613| number | 返回元素的当前深度。 | 614 615**示例:** 616 617```ts 618import { util } from '@kit.ArkTS'; 619 620let strXml = 621 '<?xml version="1.0" encoding="utf-8"?>' + 622 '<note importance="high">' + 623 '<title>Happy</title>' + 624 '</note>'; 625let textEncoder = new util.TextEncoder(); 626let arrbuffer = textEncoder.encodeInto(strXml); 627let that = new xml.XmlPullParser(arrbuffer.buffer as object as ArrayBuffer); 628let str = ""; 629function func(key: xml.EventType, value: xml.ParseInfo) { 630 str += 'key:' + key + ' value:' + value.getDepth() + ' '; 631 return true; // Determines whether to continually parse, which is used to continue or terminate parsing. 632} 633let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func} 634that.parse(options); 635console.log(str); 636// 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 637``` 638 639### getLineNumber 640 641getLineNumber(): number 642 643获取当前行号,从1开始。 644 645**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 646 647**系统能力:** SystemCapability.Utils.Lang 648 649**返回值:** 650 651| 类型 | 说明 | 652| ------ | -------------- | 653| number | 返回当前行号。 | 654 655**示例:** 656 657```ts 658import { util } from '@kit.ArkTS'; 659 660let strXml = '<?xml version="1.0" encoding="utf-8"?><note>Work</note>'; 661let textEncoder = new util.TextEncoder(); 662let arrbuffer = textEncoder.encodeInto(strXml); 663let that = new xml.XmlPullParser(arrbuffer.buffer as object as ArrayBuffer); 664let str = ""; 665function func(key: xml.EventType, value: xml.ParseInfo) { 666 str += 'key:' + key + ' value:' + value.getLineNumber() + ' '; 667 return true; // Determines whether to continually parse, which is used to continue or terminate parsing. 668} 669let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func} 670that.parse(options); 671console.log(str); 672// key:0 value:1 key:2 value:1 key:4 value:1 key:3 value:1 key:1 value:1 673``` 674 675### getName 676 677getName(): string 678 679获取当前元素名称。 680 681**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 682 683**系统能力:** SystemCapability.Utils.Lang 684 685**返回值:** 686 687| 类型 | 说明 | 688| ------ | ------------------ | 689| string | 返回当前元素名称。 | 690 691**示例:** 692 693```ts 694import { util } from '@kit.ArkTS'; 695 696let strXml = '<?xml version="1.0" encoding="utf-8"?><note>Happy</note>'; 697let textEncoder = new util.TextEncoder(); 698let arrbuffer = textEncoder.encodeInto(strXml); 699let that = new xml.XmlPullParser(arrbuffer.buffer as object as ArrayBuffer); 700let str = ""; 701function func(key: xml.EventType, value: xml.ParseInfo) { 702 str += 'key:' + key + ' value:' + value.getName() + ' '; 703 return true; // Determines whether to continually parse, which is used to continue or terminate parsing. 704} 705let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func} 706that.parse(options); 707console.log(str); 708// key:0 value: key:2 value:note key:4 value: key:3 value:note key:1 value: 709``` 710### getNamespace 711 712getNamespace(): string 713 714获取当前元素的命名空间。 715 716**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 717 718**系统能力:** SystemCapability.Utils.Lang 719 720**返回值:** 721 722| 类型 | 说明 | 723| ------ | ------------------------ | 724| string | 返回当前元素的命名空间。 | 725 726**示例:** 727 728```ts 729import { util } from '@kit.ArkTS'; 730 731let strXml = 732 '<?xml version="1.0" encoding="utf-8"?>' + 733 '<note xmlns:h="http://www.w3.org">' + 734 '<h:title>Happy</h:title>' + 735 '</note>'; 736let textEncoder = new util.TextEncoder(); 737let arrbuffer = textEncoder.encodeInto(strXml); 738let that = new xml.XmlPullParser(arrbuffer.buffer as object as ArrayBuffer); 739let str = ""; 740function func(key: xml.EventType, value: xml.ParseInfo) { 741 str += 'key:' + key + ' value:' + value.getNamespace() + ' '; 742 return true; // Determines whether to continually parse, which is used to continue or terminate parsing. 743} 744let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:false, tokenValueCallbackFunction:func} 745that.parse(options); 746console.log(str); 747// 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: 748``` 749### getPrefix 750 751getPrefix(): string 752 753获取当前元素前缀。 754 755**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 756 757**系统能力:** SystemCapability.Utils.Lang 758 759**返回值:** 760 761| 类型 | 说明 | 762| ------ | ------------------ | 763| string | 返回当前元素前缀。 | 764 765**示例:** 766 767```ts 768import { util } from '@kit.ArkTS'; 769 770let strXml = 771 '<?xml version="1.0" encoding="utf-8"?>' + 772 '<note xmlns:h="http://www.w3.org/TR/html4">' + 773 '<h:title>Happy</h:title>' + 774 '</note>'; 775let textEncoder = new util.TextEncoder(); 776let arrbuffer = textEncoder.encodeInto(strXml); 777let that = new xml.XmlPullParser(arrbuffer.buffer as object as ArrayBuffer); 778let str = ""; 779function func(key: xml.EventType, value: xml.ParseInfo) { 780 str += 'key:' + key + ' value:' + value.getPrefix() + ' '; 781 return true; // Determines whether to continually parse, which is used to continue or terminate parsing. 782} 783let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:false, tokenValueCallbackFunction:func} 784that.parse(options); 785console.log(str); 786// key:0 value: key:2 value: key:2 value:h key:4 value: key:3 value:h key:3 value: key:1 value: 787``` 788 789### getText 790 791getText(): string 792 793获取当前事件的文本内容。 794 795**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 796 797**系统能力:** SystemCapability.Utils.Lang 798 799**返回值:** 800 801| 类型 | 说明 | 802| ------ | ------------------------ | 803| string | 返回当前事件的文本内容。 | 804 805**示例:** 806 807```ts 808import { util } from '@kit.ArkTS'; 809 810let strXml = '<?xml version="1.0" encoding="utf-8"?><note>Happy</note>'; 811let textEncoder = new util.TextEncoder(); 812let arrbuffer = textEncoder.encodeInto(strXml); 813let that = new xml.XmlPullParser(arrbuffer.buffer as object as ArrayBuffer); 814let str = ""; 815function func(key: xml.EventType, value: xml.ParseInfo) { 816 str += 'key:' + key + ' value:' + value.getText() + ' '; 817 return true; // Determines whether to continually parse, which is used to continue or terminate parsing. 818} 819let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func} 820that.parse(options); 821console.log(str); 822// key:0 value: key:2 value: key:4 value:Happy key:3 value: key:1 value: 823``` 824### isEmptyElementTag 825 826isEmptyElementTag(): boolean 827 828判断当前元素是否为空元素。 829 830**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 831 832**系统能力:** SystemCapability.Utils.Lang 833 834**返回值:** 835 836| 类型 | 说明 | 837| ------- | ---------------------------- | 838| boolean | 返回true,当前元素为空元素。 | 839 840**示例:** 841 842```ts 843import { util } from '@kit.ArkTS'; 844 845let strXml = 846 '<?xml version="1.0" encoding="utf-8"?>' + 847 '<note importance="high" logged="true">' + 848 '<title/>' + 849 '</note>'; 850let textEncoder = new util.TextEncoder(); 851let arrbuffer = textEncoder.encodeInto(strXml); 852let that = new xml.XmlPullParser(arrbuffer.buffer as object as ArrayBuffer); 853let str = ""; 854function func(key: xml.EventType, value: xml.ParseInfo) { 855 str += 'key:' + key + ' value:' + value.isEmptyElementTag() + ' '; 856 return true; // Determines whether to continually parse, which is used to continue or terminate parsing. 857} 858let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func} 859that.parse(options); 860console.log(str); 861// key:0 value:false key:2 value:false key:2 value:true key:3 value:false key:3 value:false key:1 value:false 862``` 863### isWhitespace 864 865isWhitespace(): boolean 866 867判断当前事件是否仅包含空格字符。 868 869**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 870 871**系统能力:** SystemCapability.Utils.Lang 872 873**返回值:** 874 875| 类型 | 说明 | 876| ------- | -------------------------------------- | 877| boolean | 返回true,当前文本事件仅包含空格字符。 | 878 879**示例:** 880 881```ts 882import { util } from '@kit.ArkTS'; 883 884let strXml = 885 '<?xml version="1.0" encoding="utf-8"?>' + 886 '<note importance="high" logged="true">' + 887 '<title> </title>' + 888 '</note>'; 889let textEncoder = new util.TextEncoder(); 890let arrbuffer = textEncoder.encodeInto(strXml); 891let that = new xml.XmlPullParser(arrbuffer.buffer as object as ArrayBuffer); 892let str = ""; 893function func(key: xml.EventType, value: xml.ParseInfo) { 894 str += 'key:' + key + ' value:' + value.isWhitespace() + ' '; 895 return true; // Determines whether to continually parse, which is used to continue or terminate parsing. 896} 897let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func} 898that.parse(options); 899console.log(str); 900// 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 901``` 902### getAttributeCount 903 904getAttributeCount(): number 905 906获取当前开始标记的属性数。 907 908**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 909 910**系统能力:** SystemCapability.Utils.Lang 911 912**返回值:** 913| 类型 | 说明 | 914| ------ | ---------------------- | 915| number | 当前开始标记的属性数。 | 916 917**示例:** 918 919```ts 920import { util } from '@kit.ArkTS'; 921 922let strXml = '<?xml version="1.0" encoding="utf-8"?><note importance="high" logged="true"/>'; 923let textEncoder = new util.TextEncoder(); 924let arrbuffer = textEncoder.encodeInto(strXml); 925let that = new xml.XmlPullParser(arrbuffer.buffer as object as ArrayBuffer); 926let str = ""; 927function func(key: xml.EventType, value: xml.ParseInfo) { 928 str += 'key:' + key + ' value:' + value.getAttributeCount() + ' '; 929 return true; // Determines whether to continually parse, which is used to continue or terminate parsing. 930} 931let options: xml.ParseOptions = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func} 932that.parse(options); 933console.log(str); 934// key:0 value:0 key:2 value:2 key:3 value:2 key:1 value:0 935``` 936 937## EventType 938 939事件类型枚举。 940 941**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 942 943**系统能力:** 以下各项对应的系统能力均为SystemCapability.Utils.Lang 944 945| 名称 | 值 | 说明 | 946| ---------------- | ---- | --------------------- | 947| START_DOCUMENT | 0 | 启动文件事件。 | 948| END_DOCUMENT | 1 | 结束文件事件。 | 949| START_TAG | 2 | 启动标签事件。 | 950| END_TAG | 3 | 结束标签事件。 | 951| TEXT | 4 | 文本事件。 | 952| CDSECT | 5 | CDATA事件。 | 953| COMMENT | 6 | XML注释事件。 | 954| DOCDECL | 7 | XML文档类型声明事件。 | 955| INSTRUCTION | 8 | XML处理指令声明事件。 | 956| ENTITY_REFERENCE | 9 | 实体引用事件。 | 957| WHITESPACE | 10 | 空白事件。 |