js-apis-xml.md 12.7 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);
Z
zengyawen 已提交
61 62
thatSer.setAttributes("importance", "high");  
```
Z
zengyawen 已提交
63 64 65 66 67 68 69 70


### addEmptyElement

addEmptyElement(name: string): void

写入一个空元素。

Z
zengyawen 已提交
71 72
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
73 74 75 76 77
**参数:**

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

Z
zengyawen 已提交
79 80
**示例:**

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


### setDeclaration

setDeclaration(): void

设置Declaration方法。

Z
zengyawen 已提交
95 96
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
97 98
**示例:**

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


### startElement

startElement(name: string): void

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

Z
zengyawen 已提交
113 114
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
115
**参数:**
Z
zengyawen 已提交
116

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

**示例:**

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


### endElement

endElement(): void

Z
zengyawen 已提交
135
写入元素结束标记。
Z
zengyawen 已提交
136

Z
zengyawen 已提交
137 138
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
139 140
**示例:**

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


### setNamespace

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

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

Z
zengyawen 已提交
159 160
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
161 162 163 164 165 166 167 168 169
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| prefix | string | 是 | 当前元素及其子元素的前缀。 |
| namespace | string | 是 | 当前元素及其子元素的命名空间。 |

**示例:**

170
```js
171 172
let arrayBuffer = new ArrayBuffer(1024);
let thatSer = new xml.XmlSerializer(arrayBuffer);
Z
zengyawen 已提交
173 174 175 176 177
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 已提交
178

Z
zengyawen 已提交
179
### setComment
Z
zengyawen 已提交
180

Z
zengyawen 已提交
181
setComment(text: string): void
Z
zengyawen 已提交
182 183 184

写入comment属性。

Z
zengyawen 已提交
185 186
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
187
**参数:**
Z
zengyawen 已提交
188

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

**示例:**

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


Z
zengyawen 已提交
204
### setCDATA
Z
zengyawen 已提交
205

Z
zengyawen 已提交
206
setCDATA(text: string): void
Z
zengyawen 已提交
207

Z
zengyawen 已提交
208
写入CDATA属性。
Z
zengyawen 已提交
209

Z
zengyawen 已提交
210 211
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
212 213 214 215 216
**参数:**

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

Z
zengyawen 已提交
218 219
**示例:**

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


### setText

setText(text: string): void

设置Text方法。

Z
zengyawen 已提交
233 234
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
235 236 237 238 239
**参数:**

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

Z
zengyawen 已提交
241 242
**示例:**

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


### setDocType

setDocType(text: string): void

写入DocType属性。

Z
zengyawen 已提交
259 260
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
261 262 263 264 265
**参数:**

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

Z
zengyawen 已提交
267 268
**示例:**

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


## XmlPullParser


### XmlPullParser

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

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

Z
zengyawen 已提交
285 286
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
287 288 289 290 291 292 293 294 295
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| buffer | ArrayBuffer&nbsp;\|&nbsp;DataView | 是 | 含有xml文本信息的ArrayBuffer或者DataView。 |
| encoding | string | 否 | 编码格式(仅支持utf-8)。 |

**示例:**

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


### parse

parse(option: ParseOptions): void

该接口用于解析xml。

Z
zengyawen 已提交
320 321
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
322 323 324 325 326 327 328 329
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| option | [ParseOptions](#parseoptions) | 是 | 用户控制以及获取解析信息的选项。 |

**示例:**

330
```js
331
let strXml =
Z
zengyawen 已提交
332 333 334 335 336 337
            '<?xml version="1.0" encoding="utf-8"?>' +
            '<note importance="high" logged="true">' +
            '    <title>Happy</title>' +
            '    <todo>Work</todo>' +
            '    <todo>Play</todo>' +
            '</note>';
338 339 340
let arrayBuffer = new ArrayBuffer(strXml.length);
let bufView = new Uint8Array(arrayBuffer);
let strLen = strXml.length;
341 342
for (var tmp = 0; tmp < strLen; ++tmp) {
    bufView[tmp] = strXml.charCodeAt(tmp);
Z
zengyawen 已提交
343
}
344 345 346 347
let that = new xml.XmlPullParser(arrayBuffer);
let arrTag = {};
let str = "";
let i = 0;
Z
zengyawen 已提交
348 349
function func(key, value){
    arrTag[i] = 'key:'+key+' value:'+ value.getDepth();
350
    str += arrTag[i];
Z
zengyawen 已提交
351
    i++;
352
    return true; // Determines whether to continuely parse, which is used to continue or terminate parsing.
Z
zengyawen 已提交
353
}
354
let options = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
Z
zengyawen 已提交
355
that.parse(options);
356 357 358 359 360
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代表含义为:
361
// 0(START_DOCUMENT):0(起始深度为0), 2(START_TAG):1(解析到开始标签node, 对应深度为1), 10(WHITESPACE):1(解析到空白标签空格, 对应深度为1), 2(START_TAG):2(解析到开始标签title, 对应深度为2), ...
Z
zengyawen 已提交
362
```
Z
zengyawen 已提交
363 364 365 366 367 368


## ParseOptions

xml解析选项。

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

Z
zengyawen 已提交
371

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

## ParseInfo

当前xml解析信息。


### getColumnNumber

getColumnNumber(): number

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

Z
zengyawen 已提交
391 392
**系统能力:** SystemCapability.Utils.Lang

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

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


### getDepth

getDepth(): number

获取元素的当前深度。

Z
zengyawen 已提交
406 407
**系统能力:** SystemCapability.Utils.Lang

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

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


### getLineNumber

getLineNumber(): number

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

Z
zengyawen 已提交
421 422
**系统能力:** SystemCapability.Utils.Lang

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

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


### getName

getName(): string

获取当前元素名称。

Z
zengyawen 已提交
436 437
**系统能力:** SystemCapability.Utils.Lang

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

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


### getNamespace

getNamespace(): string

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

Z
zengyawen 已提交
451 452
**系统能力:** SystemCapability.Utils.Lang

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

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


### getPrefix

getPrefix(): string

获取当前元素前缀。

Z
zengyawen 已提交
466 467
**系统能力:** SystemCapability.Utils.Lang

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

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


### getText

getText(): string

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

Z
zengyawen 已提交
481 482
**系统能力:** SystemCapability.Utils.Lang

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

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


### isEmptyElementTag

isEmptyElementTag(): boolean

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

Z
zengyawen 已提交
496 497
**系统能力:** SystemCapability.Utils.Lang

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

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


### isWhitespace

isWhitespace(): boolean

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

Z
zengyawen 已提交
511 512
**系统能力:** SystemCapability.Utils.Lang

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

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


### getAttributeCount

getAttributeCount(): number

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

Z
zengyawen 已提交
526 527
**系统能力:** SystemCapability.Utils.Lang

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


## EventType

事件枚举。

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

Z
zengyawen 已提交
540 541 542 543 544 545 546 547 548 549 550 551 552
| 名称 | 枚举值 | 说明 |
| -------- | -------- | -------- |
| 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 | 空白事件。 |