js-apis-xml.md 14.3 KB
Newer Older
Z
zengyawen 已提交
1
# xml解析与生成
Z
zengyawen 已提交
2 3 4 5 6 7 8 9

> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。


## 导入模块

```
Z
zengyawen 已提交
10
import xml from '@ohos.xml';
Z
zengyawen 已提交
11 12 13 14 15 16 17 18 19 20 21
```

## XmlSerializer


### constructor

constructor(buffer: ArrayBuffer | DataView, encoding?: string)

XmlSerializer的构造函数。

Z
zengyawen 已提交
22 23
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
24 25
**参数:**

26 27 28 29
| 参数名   | 类型                              | 必填 | 说明                                             |
| -------- | --------------------------------- | ---- | ------------------------------------------------ |
| buffer   | ArrayBuffer \| DataView | 是   | 用于接收写入xml信息的ArrayBuffer或DataView内存。 |
| encoding | string                            | 否   | 编码格式。                                       |
Z
zengyawen 已提交
30

Z
zengyawen 已提交
31 32
**示例:**

33
```js
34 35 36
let arrayBuffer = new ArrayBuffer(1024);
let bufView = new DataView(arrayBuffer);
let thatSer = new xml.XmlSerializer(bufView);
Z
zengyawen 已提交
37
```
Z
zengyawen 已提交
38 39 40 41


### setAttributes

Z
zengyawen 已提交
42
setAttributes(name: string, value: string): void
Z
zengyawen 已提交
43 44 45

设置Attributes方法。

Z
zengyawen 已提交
46 47
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
48 49
**参数:**

50 51 52 53
| 参数名 | 类型   | 必填 | 说明            |
| ------ | ------ | ---- | --------------- |
| name   | string | 是   | 属性的key值。   |
| value  | string | 是   | 属性的value值。 |
Z
zengyawen 已提交
54

Z
zengyawen 已提交
55 56
**示例:**

57
```js
58 59 60
let arrayBuffer = new ArrayBuffer(1024);
let bufView = new DataView(arrayBuffer);
let thatSer = new xml.XmlSerializer(bufView);
小马奔腾 已提交
61 62 63
thatSer.startElement("note");
thatSer.setAttributes("importance", "high"); 
thatSer.endElement(); 
Z
zengyawen 已提交
64
```
Z
zengyawen 已提交
65 66 67 68 69 70 71 72


### addEmptyElement

addEmptyElement(name: string): void

写入一个空元素。

Z
zengyawen 已提交
73 74
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
75 76
**参数:**

77 78 79
| 参数名 | 类型   | 必填 | 说明               |
| ------ | ------ | ---- | ------------------ |
| name   | string | 是   | 该空元素的元素名。 |
Z
zengyawen 已提交
80

Z
zengyawen 已提交
81 82
**示例:**

83
```js
84 85 86
let arrayBuffer = new ArrayBuffer(1024);
let bufView = new DataView(arrayBuffer);
let thatSer = new xml.XmlSerializer(bufView);
Z
zengyawen 已提交
87 88
thatSer.addEmptyElement("b"); // => <b/>
```
Z
zengyawen 已提交
89 90 91 92 93 94 95 96


### setDeclaration

setDeclaration(): void

设置Declaration方法。

Z
zengyawen 已提交
97 98
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
99 100
**示例:**

101
```js
102 103 104
let arrayBuffer = new ArrayBuffer(1024);
let bufView = new DataView(arrayBuffer);
let thatSer = new xml.XmlSerializer(bufView);
Z
zengyawen 已提交
105 106
thatSer.setDeclaration() // => <?xml version="1.0" encoding="utf-8"?>;
```
Z
zengyawen 已提交
107 108 109 110 111 112


### startElement

startElement(name: string): void

Z
zengyawen 已提交
113
根据给定名称写入元素开始标记。
Z
zengyawen 已提交
114

Z
zengyawen 已提交
115 116
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
117
**参数:**
Z
zengyawen 已提交
118

119 120 121
| 参数名 | 类型   | 必填 | 说明               |
| ------ | ------ | ---- | ------------------ |
| name   | string | 是   | 当前元素的元素名。 |
Z
zengyawen 已提交
122 123 124

**示例:**

125
```js
126 127
let arrayBuffer = new ArrayBuffer(1024);
let thatSer = new xml.XmlSerializer(arrayBuffer);
Z
zengyawen 已提交
128 129 130
thatSer.startElement("notel");
thatSer.endElement();// => '<notel/>';
```
Z
zengyawen 已提交
131 132 133 134 135 136


### endElement

endElement(): void

Z
zengyawen 已提交
137
写入元素结束标记。
Z
zengyawen 已提交
138

Z
zengyawen 已提交
139 140
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
141 142
**示例:**

143
```js
144 145 146
let arrayBuffer = new ArrayBuffer(1024);
let bufView = new DataView(arrayBuffer);
let thatSer = new xml.XmlSerializer(bufView);
Z
zengyawen 已提交
147 148 149 150
thatSer.setNamespace("h", "http://www.w3.org/TR/html4/");
thatSer.startElement("table");
thatSer.setAttributes("importance", "high");
thatSer.setText("Happy");
S
shikai-123 已提交
151
thatSer.endElement(); // => <h:table importance="high" xmlns:h="http://www.w3.org/TR/html4/">Happy</h:table>
Z
zengyawen 已提交
152
```
Z
zengyawen 已提交
153 154 155 156 157 158 159 160


### setNamespace

setNamespace(prefix: string, namespace: string): void

写入当前元素标记的命名空间。

Z
zengyawen 已提交
161 162
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
163 164
**参数:**

165 166 167 168
| 参数名    | 类型   | 必填 | 说明                           |
| --------- | ------ | ---- | ------------------------------ |
| prefix    | string | 是   | 当前元素及其子元素的前缀。     |
| namespace | string | 是   | 当前元素及其子元素的命名空间。 |
Z
zengyawen 已提交
169 170 171

**示例:**

172
```js
173 174
let arrayBuffer = new ArrayBuffer(1024);
let thatSer = new xml.XmlSerializer(arrayBuffer);
Z
zengyawen 已提交
175 176 177 178 179
thatSer.setDeclaration();
thatSer.setNamespace("h", "http://www.w3.org/TR/html4/");
thatSer.startElement("note");
thatSer.endElement();// = >'<?xml version="1.0" encoding="utf-8"?>\r\n<h:note xmlns:h="http://www.w3.org/TR/html4/"/>';
```
Z
zengyawen 已提交
180

Z
zengyawen 已提交
181
### setComment
Z
zengyawen 已提交
182

Z
zengyawen 已提交
183
setComment(text: string): void
Z
zengyawen 已提交
184 185 186

写入comment属性。

Z
zengyawen 已提交
187 188
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
189
**参数:**
Z
zengyawen 已提交
190

191 192 193
| 参数名 | 类型   | 必填 | 说明                 |
| ------ | ------ | ---- | -------------------- |
| text   | string | 是   | 当前元素的注释内容。 |
Z
zengyawen 已提交
194 195 196

**示例:**

197
```js
198 199
let arrayBuffer = new ArrayBuffer(1024);
let thatSer = new xml.XmlSerializer(arrayBuffer);
Z
zengyawen 已提交
200 201 202 203
thatSer.startElement("note");
thatSer.setComment("Hi!");
thatSer.endElement(); // => '<note>\r\n  <!--Hi!-->\r\n</note>';
```
Z
zengyawen 已提交
204 205


Z
zengyawen 已提交
206
### setCDATA
Z
zengyawen 已提交
207

Z
zengyawen 已提交
208
setCDATA(text: string): void
Z
zengyawen 已提交
209

Z
zengyawen 已提交
210
写入CDATA属性。
Z
zengyawen 已提交
211

Z
zengyawen 已提交
212 213
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
214 215
**参数:**

216 217 218
| 参数名 | 类型   | 必填 | 说明              |
| ------ | ------ | ---- | ----------------- |
| text   | string | 是   | CDATA属性的内容。 |
Z
zengyawen 已提交
219

Z
zengyawen 已提交
220 221
**示例:**

222
```js
223 224
let arrayBuffer = new ArrayBuffer(1028);
let thatSer = new xml.XmlSerializer(arrayBuffer);
Z
zengyawen 已提交
225 226
thatSer.setCDATA('root SYSTEM') // => '<![CDATA[root SYSTEM]]>';
```
Z
zengyawen 已提交
227 228 229 230 231 232 233 234


### setText

setText(text: string): void

设置Text方法。

Z
zengyawen 已提交
235 236
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
237 238
**参数:**

239 240 241
| 参数名 | 类型   | 必填 | 说明             |
| ------ | ------ | ---- | ---------------- |
| text   | string | 是   | text属性的内容。 |
Z
zengyawen 已提交
242

Z
zengyawen 已提交
243 244
**示例:**

245
```js
246 247
let arrayBuffer = new ArrayBuffer(1024);
let thatSer = new xml.XmlSerializer(arrayBuffer);
Z
zengyawen 已提交
248 249 250 251 252
thatSer.startElement("note");
thatSer.setAttributes("importance", "high");
thatSer.setText("Happy1");
thatSer.endElement(); // => '<note importance="high">Happy1</note>';
```
Z
zengyawen 已提交
253 254 255 256 257 258 259 260


### setDocType

setDocType(text: string): void

写入DocType属性。

Z
zengyawen 已提交
261 262
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
263 264
**参数:**

265 266 267
| 参数名 | 类型   | 必填 | 说明                |
| ------ | ------ | ---- | ------------------- |
| text   | string | 是   | DocType属性的内容。 |
Z
zengyawen 已提交
268

Z
zengyawen 已提交
269 270
**示例:**

271
```js
272 273
let arrayBuffer = new ArrayBuffer(1024);
let thatSer = new xml.XmlSerializer(arrayBuffer);
Z
zengyawen 已提交
274 275
thatSer.setDocType('root SYSTEM'); // => '<!DOCTYPE root SYSTEM>';
```
Z
zengyawen 已提交
276 277 278 279 280 281 282 283 284 285 286


## XmlPullParser


### XmlPullParser

constructor(buffer: ArrayBuffer | DataView, encoding?: string)

创建并返回一个XmlPullParser对象,该XmlPullParser对象传参两个, 第一参数是ArrayBuffer或DataView类型的一段内存,第二个参数为文件格式(默认为UTF-8)

Z
zengyawen 已提交
287 288
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
289 290
**参数:**

291 292 293 294
| 参数名   | 类型                              | 必填 | 说明                                       |
| -------- | --------------------------------- | ---- | ------------------------------------------ |
| buffer   | ArrayBuffer \| DataView | 是   | 含有xml文本信息的ArrayBuffer或者DataView。 |
| encoding | string                            | 否   | 编码格式(仅支持utf-8)。                  |
Z
zengyawen 已提交
295 296 297

**示例:**

298
```js
299
let strXml =
Z
zengyawen 已提交
300 301 302 303 304 305
            '<?xml version="1.0" encoding="utf-8"?>' +
            '<note importance="high" logged="true">' +
            '    <title>Happy</title>' +
            '    <todo>Work</todo>' +
            '    <todo>Play</todo>' +
            '</note>';
306 307 308
let arrayBuffer = new ArrayBuffer(strXml.length);
let bufView = new Uint8Array(arrayBuffer);
let strLen = strXml.length;
Z
zengyawen 已提交
309 310 311
for (var i = 0; i < strLen; ++i) {
    bufView[i] = strXml.charCodeAt(i);//设置arraybuffer方式
}
312
let that = new xml.XmlPullParser(arrayBuffer);
Z
zengyawen 已提交
313
```
Z
zengyawen 已提交
314 315 316 317 318 319 320 321


### parse

parse(option: ParseOptions): void

该接口用于解析xml。

Z
zengyawen 已提交
322 323
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
324 325
**参数:**

326 327 328
| 参数名 | 类型                          | 必填 | 说明                             |
| ------ | ----------------------------- | ---- | -------------------------------- |
| option | [ParseOptions](#parseoptions) | 是   | 用户控制以及获取解析信息的选项。 |
Z
zengyawen 已提交
329 330 331

**示例:**

332
```js
333
let strXml =
Z
zengyawen 已提交
334 335 336 337 338 339
            '<?xml version="1.0" encoding="utf-8"?>' +
            '<note importance="high" logged="true">' +
            '    <title>Happy</title>' +
            '    <todo>Work</todo>' +
            '    <todo>Play</todo>' +
            '</note>';
340 341 342
let arrayBuffer = new ArrayBuffer(strXml.length);
let bufView = new Uint8Array(arrayBuffer);
let strLen = strXml.length;
343 344
for (var tmp = 0; tmp < strLen; ++tmp) {
    bufView[tmp] = strXml.charCodeAt(tmp);
Z
zengyawen 已提交
345
}
346 347 348 349
let that = new xml.XmlPullParser(arrayBuffer);
let arrTag = {};
let str = "";
let i = 0;
Z
zengyawen 已提交
350 351
function func(key, value){
    arrTag[i] = 'key:'+key+' value:'+ value.getDepth();
352
    str += arrTag[i];
Z
zengyawen 已提交
353
    i++;
354
    return true; // Determines whether to continuely parse, which is used to continue or terminate parsing.
Z
zengyawen 已提交
355
}
356
let options = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
Z
zengyawen 已提交
357
that.parse(options);
358 359 360 361 362
console.log(str);
// 输出:
// key:0 value:0key:2 value:1key:10 value:1key:2 value:2key:4 value:2key:3 value:2key:10 value:1key:2 value:2key:4 value:2key:3 value:2key:10 value:1key:2 value:2key:4 value:2key:3 value:2key:3 value:1key:1 value:0
// 解析:
// key代表了当前事件类型,value为当前解析的深度。你可以根据EVENTTYPE来知道具体的解析事件。例如本示例结果key: value代表含义为:
363
// 0(START_DOCUMENT):0(起始深度为0), 2(START_TAG):1(解析到开始标签node, 对应深度为1), 10(WHITESPACE):1(解析到空白标签空格, 对应深度为1), 2(START_TAG):2(解析到开始标签title, 对应深度为2), ...
Z
zengyawen 已提交
364
```
Z
zengyawen 已提交
365 366 367 368 369 370


## ParseOptions

xml解析选项。

Z
zengyawen 已提交
371 372
**系统能力:** 以下各项对应的系统能力均为SystemCapability.Utils.Lang

Z
zengyawen 已提交
373

374 375 376 377 378 379 380
| 名称                           | 类型                                                         | 必填 | 说明                                    |
| ------------------------------ | ------------------------------------------------------------ | ---- | --------------------------------------- |
| supportDoctype                 | boolean                                                      | 否   | 是否忽略Doctype , 默认false。 |
| ignoreNameSpace                | boolean                                                      | 否   | 是否忽略NameSpace,默认false。          |
| tagValueCallbackFunction       | (name: string, value: string) =&gt; boolean | 否   | 获取tagValue回调函数。                  |
| attributeValueCallbackFunction | (name: string, value: string) =&gt; boolean | 否   | 获取attributeValue回调函数。            |
| tokenValueCallbackFunction     | (eventType: [EventType](#eventtype), value: [ParseInfo](#parseinfo)) =&gt; boolean | 否   | 获取tokenValue回调函数。                |
Z
zengyawen 已提交
381 382 383 384 385 386 387 388 389 390

## ParseInfo

当前xml解析信息。


### getColumnNumber

getColumnNumber(): number

Z
zengyawen 已提交
391
获取当前列号,从1开始。
Z
zengyawen 已提交
392

Z
zengyawen 已提交
393 394
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
395 396
**返回值:**

397 398
| 类型   | 说明           |
| ------ | -------------- |
Z
zengyawen 已提交
399
| number | 返回当前列号。 |
Z
zengyawen 已提交
400 401 402 403 404 405 406 407


### getDepth

getDepth(): number

获取元素的当前深度。

Z
zengyawen 已提交
408 409
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
410 411
**返回值:**

412 413
| 类型   | 说明                 |
| ------ | -------------------- |
Z
zengyawen 已提交
414
| number | 返回元素的当前深度。 |
Z
zengyawen 已提交
415 416 417 418 419 420


### getLineNumber

getLineNumber(): number

Z
zengyawen 已提交
421
获取当前行号,从1开始。
Z
zengyawen 已提交
422

Z
zengyawen 已提交
423 424
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
425 426
**返回值:**

427 428
| 类型   | 说明           |
| ------ | -------------- |
Z
zengyawen 已提交
429
| number | 返回当前行号。 |
Z
zengyawen 已提交
430 431 432 433 434 435 436 437


### getName

getName(): string

获取当前元素名称。

Z
zengyawen 已提交
438 439
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
440 441
**返回值:**

442 443
| 类型   | 说明               |
| ------ | ------------------ |
Z
zengyawen 已提交
444
| string | 返回当前元素名称。 |
Z
zengyawen 已提交
445 446 447 448 449 450 451 452


### getNamespace

getNamespace(): string

获取当前元素的命名空间。

Z
zengyawen 已提交
453 454
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
455 456
**返回值:**

457 458
| 类型   | 说明                     |
| ------ | ------------------------ |
Z
zengyawen 已提交
459
| string | 返回当前元素的命名空间。 |
Z
zengyawen 已提交
460 461 462 463 464 465 466 467


### getPrefix

getPrefix(): string

获取当前元素前缀。

Z
zengyawen 已提交
468 469
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
470 471
**返回值:**

472 473
| 类型   | 说明               |
| ------ | ------------------ |
Z
zengyawen 已提交
474
| string | 返回当前元素前缀。 |
Z
zengyawen 已提交
475 476 477 478 479 480 481 482


### getText

getText(): string

获取当前事件的文本内容。

Z
zengyawen 已提交
483 484
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
485 486
**返回值:**

487 488
| 类型   | 说明                     |
| ------ | ------------------------ |
Z
zengyawen 已提交
489
| string | 返回当前事件的文本内容。 |
Z
zengyawen 已提交
490 491 492 493 494 495 496 497


### isEmptyElementTag

isEmptyElementTag(): boolean

判断当前元素是否为空元素。

Z
zengyawen 已提交
498 499
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
500 501
**返回值:**

502 503
| 类型    | 说明                         |
| ------- | ---------------------------- |
Z
zengyawen 已提交
504
| boolean | 返回true,当前元素为空元素。 |
Z
zengyawen 已提交
505 506 507 508 509 510 511 512


### isWhitespace

isWhitespace(): boolean

判断当前文本事件是否仅包含空格字符。

Z
zengyawen 已提交
513 514
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
515 516
**返回值:**

517 518
| 类型    | 说明                                   |
| ------- | -------------------------------------- |
Z
zengyawen 已提交
519
| boolean | 返回true,当前文本事件仅包含空格字符。 |
Z
zengyawen 已提交
520 521 522 523 524 525 526 527


### getAttributeCount

getAttributeCount(): number

获取当前开始标记的属性数。

Z
zengyawen 已提交
528 529
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
530
**返回值:**
531 532
| 类型   | 说明                   |
| ------ | ---------------------- |
Z
zengyawen 已提交
533
| number | 当前开始标记的属性数。 |
Z
zengyawen 已提交
534 535 536 537 538 539


## EventType

事件枚举。

Z
zengyawen 已提交
540 541
**系统能力:** 以下各项对应的系统能力均为SystemCapability.Utils.Lang

542 543 544 545 546 547 548 549 550 551 552 553 554
| 名称             | 值   | 说明                  |
| ---------------- | ---- | --------------------- |
| 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   | 空白事件。            |