1# xml解析与生成 2 3> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** 4> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 5 6 7## 导入模块 8 9``` 10import xml from '@ohos.xml'; 11``` 12 13## XmlSerializer 14 15 16### constructor 17 18constructor(buffer: ArrayBuffer | DataView, encoding?: string) 19 20XmlSerializer的构造函数。 21 22**系统能力:** SystemCapability.Utils.Lang 23 24**参数:** 25 26| 参数名 | 类型 | 必填 | 说明 | 27| -------- | -------- | -------- | -------- | 28| buffer | ArrayBuffer \| DataView | 是 | 用于接收写入xml信息的ArrayBuffer或DataView内存。 | 29| encoding | string | 否 | 编码格式。 | 30 31**示例:** 32 33```js 34var arrayBuffer = new ArrayBuffer(1024); 35var bufView = new DataView(arrayBuffer); 36var thatSer = new xml.XmlSerializer(bufView); 37``` 38 39 40### setAttributes 41 42setAttributes(name: string, value: string): void 43 44设置Attributes方法。 45 46**系统能力:** SystemCapability.Utils.Lang 47 48**参数:** 49 50| 参数名 | 类型 | 必填 | 说明 | 51| -------- | -------- | -------- | -------- | 52| name | string | 是 | 属性的key值。 | 53| value | string | 是 | 属性的value值。 | 54 55**示例:** 56 57```js 58var arrayBuffer = new ArrayBuffer(1024); 59var bufView = new DataView(arrayBuffer); 60var thatSer = new xml.XmlSerializer(bufView); 61thatSer.setAttributes("importance", "high"); 62``` 63 64 65### addEmptyElement 66 67addEmptyElement(name: string): void 68 69写入一个空元素。 70 71**系统能力:** SystemCapability.Utils.Lang 72 73**参数:** 74 75| 参数名 | 类型 | 必填 | 说明 | 76| -------- | -------- | -------- | -------- | 77| name | string | 是 | 该空元素的元素名。 | 78 79**示例:** 80 81```js 82var arrayBuffer = new ArrayBuffer(1024); 83var bufView = new DataView(arrayBuffer); 84var thatSer = new xml.XmlSerializer(bufView); 85thatSer.addEmptyElement("b"); // => <b/> 86``` 87 88 89### setDeclaration 90 91setDeclaration(): void 92 93设置Declaration方法。 94 95**系统能力:** SystemCapability.Utils.Lang 96 97**示例:** 98 99```js 100var arrayBuffer = new ArrayBuffer(1024); 101var bufView = new DataView(arrayBuffer); 102var thatSer = new xml.XmlSerializer(bufView); 103thatSer.setDeclaration() // => <?xml version="1.0" encoding="utf-8"?>; 104``` 105 106 107### startElement 108 109startElement(name: string): void 110 111根据给定名称写入元素开始标记。 112 113**系统能力:** SystemCapability.Utils.Lang 114 115**参数:** 116 117| 参数名 | 类型 | 必填 | 说明 | 118| -------- | -------- | -------- | -------- | 119| name | string | 是 | 当前元素的元素名。 | 120 121**示例:** 122 123```js 124var arrayBuffer = new ArrayBuffer(1024); 125var thatSer = new xml.XmlSerializer(arrayBuffer); 126thatSer.startElement("notel"); 127thatSer.endElement();// => '<notel/>'; 128``` 129 130 131### endElement 132 133endElement(): void 134 135写入元素结束标记。 136 137**系统能力:** SystemCapability.Utils.Lang 138 139**示例:** 140 141```js 142var arrayBuffer = new ArrayBuffer(1024); 143var bufView = new DataView(arrayBuffer); 144var thatSer = new xml.XmlSerializer(bufView); 145thatSer.setNamespace("h", "http://www.w3.org/TR/html4/"); 146thatSer.startElement("table"); 147thatSer.setAttributes("importance", "high"); 148thatSer.setText("Happy"); 149endElement(); // => <h:table importance="high" xmlns:h="http://www.w3.org/TR/html4/">Happy</h:table> 150``` 151 152 153### setNamespace 154 155setNamespace(prefix: string, namespace: string): void 156 157写入当前元素标记的命名空间。 158 159**系统能力:** SystemCapability.Utils.Lang 160 161**参数:** 162 163| 参数名 | 类型 | 必填 | 说明 | 164| -------- | -------- | -------- | -------- | 165| prefix | string | 是 | 当前元素及其子元素的前缀。 | 166| namespace | string | 是 | 当前元素及其子元素的命名空间。 | 167 168**示例:** 169 170```js 171var arrayBuffer = new ArrayBuffer(1024); 172var thatSer = new xml.XmlSerializer(arrayBuffer); 173thatSer.setDeclaration(); 174thatSer.setNamespace("h", "http://www.w3.org/TR/html4/"); 175thatSer.startElement("note"); 176thatSer.endElement();// = >'<?xml version="1.0" encoding="utf-8"?>\r\n<h:note xmlns:h="http://www.w3.org/TR/html4/"/>'; 177``` 178 179### setComment 180 181setComment(text: string): void 182 183写入comment属性。 184 185**系统能力:** SystemCapability.Utils.Lang 186 187**参数:** 188 189| 参数名 | 类型 | 必填 | 说明 | 190| -------- | -------- | -------- | -------- | 191| text | string | 是 | 当前元素的注释内容。 | 192 193**示例:** 194 195```js 196var arrayBuffer = new ArrayBuffer(1024); 197var thatSer = new xml.XmlSerializer(arrayBuffer); 198thatSer.startElement("note"); 199thatSer.setComment("Hi!"); 200thatSer.endElement(); // => '<note>\r\n <!--Hi!-->\r\n</note>'; 201``` 202 203 204### setCDATA 205 206setCDATA(text: string): void 207 208写入CDATA属性。 209 210**系统能力:** SystemCapability.Utils.Lang 211 212**参数:** 213 214| 参数名 | 类型 | 必填 | 说明 | 215| -------- | -------- | -------- | -------- | 216| text | string | 是 | CDATA属性的内容。 | 217 218**示例:** 219 220```js 221var arrayBuffer = new ArrayBuffer(1028); 222var thatSer = new xml.XmlSerializer(arrayBuffer); 223thatSer.setCDATA('root SYSTEM') // => '<![CDATA[root SYSTEM]]>'; 224``` 225 226 227### setText 228 229setText(text: string): void 230 231设置Text方法。 232 233**系统能力:** SystemCapability.Utils.Lang 234 235**参数:** 236 237| 参数名 | 类型 | 必填 | 说明 | 238| -------- | -------- | -------- | -------- | 239| text | string | 是 | text属性的内容。 | 240 241**示例:** 242 243```js 244var arrayBuffer = new ArrayBuffer(1024); 245var thatSer = new xml.XmlSerializer(arrayBuffer); 246thatSer.startElement("note"); 247thatSer.setAttributes("importance", "high"); 248thatSer.setText("Happy1"); 249thatSer.endElement(); // => '<note importance="high">Happy1</note>'; 250``` 251 252 253### setDocType 254 255setDocType(text: string): void 256 257写入DocType属性。 258 259**系统能力:** SystemCapability.Utils.Lang 260 261**参数:** 262 263| 参数名 | 类型 | 必填 | 说明 | 264| -------- | -------- | -------- | -------- | 265| text | string | 是 | DocType属性的内容。 | 266 267**示例:** 268 269```js 270var arrayBuffer = new ArrayBuffer(1024); 271var thatSer = new xml.XmlSerializer(arrayBuffer); 272thatSer.setDocType('root SYSTEM'); // => '<!DOCTYPE root SYSTEM>'; 273``` 274 275 276## XmlPullParser 277 278 279### XmlPullParser 280 281constructor(buffer: ArrayBuffer | DataView, encoding?: string) 282 283创建并返回一个XmlPullParser对象,该XmlPullParser对象传参两个, 第一参数是ArrayBuffer或DataView类型的一段内存,第二个参数为文件格式(默认为UTF-8) 284 285**系统能力:** SystemCapability.Utils.Lang 286 287**参数:** 288 289| 参数名 | 类型 | 必填 | 说明 | 290| -------- | -------- | -------- | -------- | 291| buffer | ArrayBuffer \| DataView | 是 | 含有xml文本信息的ArrayBuffer或者DataView。 | 292| encoding | string | 否 | 编码格式(仅支持utf-8)。 | 293 294**示例:** 295 296```js 297var strXml = 298 '<?xml version="1.0" encoding="utf-8"?>' + 299 '<note importance="high" logged="true">' + 300 ' <title>Happy</title>' + 301 ' <todo>Work</todo>' + 302 ' <todo>Play</todo>' + 303 '</note>'; 304var arrayBuffer = new ArrayBuffer(strXml.length*2); 305var bufView = new Uint8Array(arrayBuffer); 306var strLen = strXml.length; 307for (var i = 0; i < strLen; ++i) { 308 bufView[i] = strXml.charCodeAt(i);//设置arraybuffer方式 309} 310var that = new xml.XmlPullParser(arrayBuffer); 311``` 312 313 314### parse 315 316parse(option: ParseOptions): void 317 318该接口用于解析xml。 319 320**系统能力:** SystemCapability.Utils.Lang 321 322**参数:** 323 324| 参数名 | 类型 | 必填 | 说明 | 325| -------- | -------- | -------- | -------- | 326| option | [ParseOptions](#parseoptions) | 是 | 用户控制以及获取解析信息的选项。 | 327 328**示例:** 329 330```js 331var strXml = 332 '<?xml version="1.0" encoding="utf-8"?>' + 333 '<note importance="high" logged="true">' + 334 ' <title>Happy</title>' + 335 ' <todo>Work</todo>' + 336 ' <todo>Play</todo>' + 337 '</note>'; 338var arrayBuffer = new ArrayBuffer(strXml.length*2); 339var bufView = new Uint8Array(arrayBuffer); 340var strLen = strXml.length; 341for (var i = 0; i < strLen; ++i) { 342 bufView[i] = strXml.charCodeAt(i); 343} 344var that = new xml.XmlPullParser(arrayBuffer); 345var arrTag = {}; 346arrTag[0] = '132'; 347var i = 1; 348function func(key, value){ 349 arrTag[i] = 'key:'+key+' value:'+ value.getDepth(); 350 i++; 351 return true; 352} 353var options = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func} 354that.parse(options); 355``` 356 357 358## ParseOptions 359 360xml解析选项。 361 362**系统能力:** 以下各项对应的系统能力均为SystemCapability.Utils.Lang 363 364 365| 名称 | 类型 | 必填 | 说明 | 366| -------- | -------- | -------- | -------- | 367| supportDoctype | boolean | 否 | 是否忽略Doctype , 默认false。 | 368| ignoreNameSpace | boolean | 否 | 是否忽略NameSpace,默认false。 | 369| tagValueCallbackFunction | (name: string, value: string)=> boolean | 否 | 获取tagValue回调函数。 | 370| attributeValueCallbackFunction | (name: string, value: string)=> boolean | 否 | 获取attributeValue回调函数。 | 371| tokenValueCallbackFunction | (eventType: [EventType](#eventtype), value: [ParseInfo](#parseinfo))=> boolean | 否 | 获取tokenValue回调函数。 | 372 373## ParseInfo 374 375当前xml解析信息。 376 377 378### getColumnNumber 379 380getColumnNumber(): number 381 382获取当前列号,从1开始。 383 384**系统能力:** SystemCapability.Utils.Lang 385 386**返回值:** 387 388| 类型 | 说明 | 389| -------- | -------- | 390| number | 返回当前列号。 | 391 392 393### getDepth 394 395getDepth(): number 396 397获取元素的当前深度。 398 399**系统能力:** SystemCapability.Utils.Lang 400 401**返回值:** 402 403| 类型 | 说明 | 404| -------- | -------- | 405| number | 返回元素的当前深度。 | 406 407 408### getLineNumber 409 410getLineNumber(): number 411 412获取当前行号,从1开始。 413 414**系统能力:** SystemCapability.Utils.Lang 415 416**返回值:** 417 418| 类型 | 说明 | 419| -------- | -------- | 420| number | 返回当前行号。 | 421 422 423### getName 424 425getName(): string 426 427获取当前元素名称。 428 429**系统能力:** SystemCapability.Utils.Lang 430 431**返回值:** 432 433| 类型 | 说明 | 434| -------- | -------- | 435| string | 返回当前元素名称。 | 436 437 438### getNamespace 439 440getNamespace(): string 441 442获取当前元素的命名空间。 443 444**系统能力:** SystemCapability.Utils.Lang 445 446**返回值:** 447 448| 类型 | 说明 | 449| -------- | -------- | 450| string | 返回当前元素的命名空间。 | 451 452 453### getPrefix 454 455getPrefix(): string 456 457获取当前元素前缀。 458 459**系统能力:** SystemCapability.Utils.Lang 460 461**返回值:** 462 463| 类型 | 说明 | 464| -------- | -------- | 465| string | 返回当前元素前缀。 | 466 467 468### getText 469 470getText(): string 471 472获取当前事件的文本内容。 473 474**系统能力:** SystemCapability.Utils.Lang 475 476**返回值:** 477 478| 类型 | 说明 | 479| -------- | -------- | 480| string | 返回当前事件的文本内容。 | 481 482 483### isEmptyElementTag 484 485isEmptyElementTag(): boolean 486 487判断当前元素是否为空元素。 488 489**系统能力:** SystemCapability.Utils.Lang 490 491**返回值:** 492 493| 类型 | 说明 | 494| -------- | -------- | 495| boolean | 返回true,当前元素为空元素。 | 496 497 498### isWhitespace 499 500isWhitespace(): boolean 501 502判断当前文本事件是否仅包含空格字符。 503 504**系统能力:** SystemCapability.Utils.Lang 505 506**返回值:** 507 508| 类型 | 说明 | 509| -------- | -------- | 510| boolean | 返回true,当前文本事件仅包含空格字符。 | 511 512 513### getAttributeCount 514 515getAttributeCount(): number 516 517获取当前开始标记的属性数。 518 519**系统能力:** SystemCapability.Utils.Lang 520 521**返回值:** 522| 类型 | 说明 | 523| -------- | -------- | 524| number | 当前开始标记的属性数。 | 525 526 527## EventType 528 529事件枚举。 530 531**系统能力:** 以下各项对应的系统能力均为SystemCapability.Utils.Lang 532 533| 名称 | 枚举值 | 说明 | 534| -------- | -------- | -------- | 535| START_DOCUMENT | 0 | 启动文件事件。 | 536| END_DOCUMENT | 1 | 结束文件事件。 | 537| START_TAG | 2 | 启动标签事件。 | 538| END_TAG | 3 | 结束标签事件。 | 539| TEXT | 4 | 文本事件。 | 540| CDSECT | 5 | CDATA事件。 | 541| COMMENT | 6 | XML注释事件。 | 542| DOCDECL | 7 | XML文档类型声明事件。 | 543| INSTRUCTION | 8 | XML处理指令声明事件。 | 544| ENTITY_REFERENCE | 9 | 实体引用事件。 | 545| WHITESPACE | 10 | 空白事件。 | 546