js-apis-xml.md 10.4 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
```

Z
zengyawen 已提交
13 14 15
## 系统能力

SystemCapability.Utils.Lang
Z
zengyawen 已提交
16 17 18 19 20 21 22 23 24 25

## XmlSerializer


### constructor

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

XmlSerializer的构造函数。

Z
zengyawen 已提交
26 27 28 29 30 31
**参数:**

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

Z
zengyawen 已提交
33 34 35 36 37 38 39
**示例:**

```
var arrayBuffer = new ArrayBuffer(1024);
var bufView = new DataView(arrayBuffer);
var thatSer = new xml.XmlSerializer(bufView);
```
Z
zengyawen 已提交
40 41 42 43


### setAttributes

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

设置Attributes方法。

Z
zengyawen 已提交
48 49 50 51 52 53
**参数:**

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

Z
zengyawen 已提交
55 56 57 58 59 60
**示例:**

```
var thatSer = new xml.XmlSerializer(bufView);
thatSer.setAttributes("importance", "high");  
```
Z
zengyawen 已提交
61 62 63 64 65 66 67 68


### addEmptyElement

addEmptyElement(name: string): void

写入一个空元素。

Z
zengyawen 已提交
69 70 71 72 73
**参数:**

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

Z
zengyawen 已提交
75 76 77 78 79 80
**示例:**

```
 var thatSer = new xml.XmlSerializer(bufView);
thatSer.addEmptyElement("b"); // => <b/>
```
Z
zengyawen 已提交
81 82 83 84 85 86 87 88


### setDeclaration

setDeclaration(): void

设置Declaration方法。

Z
zengyawen 已提交
89 90 91 92 93 94
**示例:**

```
var thatSer = new xml.XmlSerializer(bufView);
thatSer.setDeclaration() // => <?xml version="1.0" encoding="utf-8"?>;
```
Z
zengyawen 已提交
95 96 97 98 99 100


### startElement

startElement(name: string): void

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

Z
zengyawen 已提交
103
**参数:**
Z
zengyawen 已提交
104

Z
zengyawen 已提交
105 106 107 108 109 110 111 112 113 114 115 116
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| name | string | 是 | 当前元素的元素名。 |

**示例:**

```
var arrayBuffer = new ArrayBuffer(1024);
var thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.startElement("notel");
thatSer.endElement();// => '<notel/>';
```
Z
zengyawen 已提交
117 118 119 120 121 122


### endElement

endElement(): void

Z
zengyawen 已提交
123
写入元素结束标记。
Z
zengyawen 已提交
124

Z
zengyawen 已提交
125 126 127 128 129 130 131 132 133 134
**示例:**

```
var thatSer = new xml.XmlSerializer(bufView);
thatSer.setNamespace("h", "http://www.w3.org/TR/html4/");
thatSer.startElement("table");
thatSer.setAttributes("importance", "high");
thatSer.setText("Happy");
endElement(); // => <h:table importance="high" xmlns:h="http://www.w3.org/TR/html4/">Happy</h:table>
```
Z
zengyawen 已提交
135 136 137 138 139 140 141 142


### setNamespace

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

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

Z
zengyawen 已提交
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
**参数:**

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

**示例:**

```
var arrayBuffer = new ArrayBuffer(1024);
var thatSer = new xml.XmlSerializer(arrayBuffer);
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 已提交
160

Z
zengyawen 已提交
161
### setComment
Z
zengyawen 已提交
162

Z
zengyawen 已提交
163
setComment(text: string): void
Z
zengyawen 已提交
164 165 166

写入comment属性。

Z
zengyawen 已提交
167
**参数:**
Z
zengyawen 已提交
168

Z
zengyawen 已提交
169 170 171 172 173 174 175 176 177 178 179 180 181
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| text | string | 是 | 当前元素的注释内容。 |

**示例:**

```
var arrayBuffer = new ArrayBuffer(1024);
var thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.startElement("note");
thatSer.setComment("Hi!");
thatSer.endElement(); // => '<note>\r\n  <!--Hi!-->\r\n</note>';
```
Z
zengyawen 已提交
182 183


Z
zengyawen 已提交
184
### setCDATA
Z
zengyawen 已提交
185

Z
zengyawen 已提交
186
setCDATA(text: string): void
Z
zengyawen 已提交
187

Z
zengyawen 已提交
188
写入CDATA属性。
Z
zengyawen 已提交
189

Z
zengyawen 已提交
190 191 192 193 194
**参数:**

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

Z
zengyawen 已提交
196 197 198 199 200 201 202
**示例:**

```
var arrayBuffer = new ArrayBuffer(1028);
var thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.setCDATA('root SYSTEM') // => '<![CDATA[root SYSTEM]]>';
```
Z
zengyawen 已提交
203 204 205 206 207 208 209 210


### setText

setText(text: string): void

设置Text方法。

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

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

Z
zengyawen 已提交
217 218 219 220 221 222 223 224 225 226
**示例:**

```
var arrayBuffer = new ArrayBuffer(1024);
var thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.startElement("note");
thatSer.setAttributes("importance", "high");
thatSer.setText("Happy1");
thatSer.endElement(); // => '<note importance="high">Happy1</note>';
```
Z
zengyawen 已提交
227 228 229 230 231 232 233 234


### setDocType

setDocType(text: string): void

写入DocType属性。

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

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

Z
zengyawen 已提交
241 242 243 244 245 246 247
**示例:**

```
var arrayBuffer = new ArrayBuffer(1024);
var thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.setDocType('root SYSTEM'); // => '<!DOCTYPE root SYSTEM>';
```
Z
zengyawen 已提交
248 249 250 251 252 253 254 255 256 257 258


## XmlPullParser


### XmlPullParser

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

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

Z
zengyawen 已提交
259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283
**参数:**

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

**示例:**

```
var strXml =
            '<?xml version="1.0" encoding="utf-8"?>' +
            '<note importance="high" logged="true">' +
            '    <title>Happy</title>' +
            '    <todo>Work</todo>' +
            '    <todo>Play</todo>' +
            '</note>';
var arrayBuffer = new ArrayBuffer(strXml.length*2);
var bufView = new Uint8Array(arrayBuffer);
var strLen = strXml.length;
for (var i = 0; i < strLen; ++i) {
    bufView[i] = strXml.charCodeAt(i);//设置arraybuffer方式
}
var that = new xml.XmlPullParser(arrayBuffer);
```
Z
zengyawen 已提交
284 285 286 287 288 289 290 291


### parse

parse(option: ParseOptions): void

该接口用于解析xml。

Z
zengyawen 已提交
292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325
**参数:**

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

**示例:**

```
var strXml =
            '<?xml version="1.0" encoding="utf-8"?>' +
            '<note importance="high" logged="true">' +
            '    <title>Happy</title>' +
            '    <todo>Work</todo>' +
            '    <todo>Play</todo>' +
            '</note>';
var arrayBuffer = new ArrayBuffer(strXml.length*2);
var bufView = new Uint8Array(arrayBuffer);
var strLen = strXml.length;
for (var i = 0; i < strLen; ++i) {
    bufView[i] = strXml.charCodeAt(i);
}
var that = new xml.XmlPullParser(arrayBuffer);
var arrTag = {};
arrTag[0] = '132';
var i = 1;
function func(key, value){
    arrTag[i] = 'key:'+key+' value:'+ value.getDepth();
    i++;
    return true;
}
var options = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func}
that.parse(options);
```
Z
zengyawen 已提交
326 327 328 329 330 331


## ParseOptions

xml解析选项。

Z
zengyawen 已提交
332

333
| 名称 | 类型 | 必填 | 说明 |
Z
zengyawen 已提交
334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349
| -------- | -------- | -------- | -------- |
| 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 已提交
350
获取当前列号,从1开始。
Z
zengyawen 已提交
351

Z
zengyawen 已提交
352 353 354 355 356
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| number | 返回当前列号。 |
Z
zengyawen 已提交
357 358 359 360 361 362 363 364


### getDepth

getDepth(): number

获取元素的当前深度。

Z
zengyawen 已提交
365 366 367 368 369
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| number | 返回元素的当前深度。 |
Z
zengyawen 已提交
370 371 372 373 374 375


### getLineNumber

getLineNumber(): number

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

Z
zengyawen 已提交
378 379 380 381 382
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| number | 返回当前行号。 |
Z
zengyawen 已提交
383 384 385 386 387 388 389 390


### getName

getName(): string

获取当前元素名称。

Z
zengyawen 已提交
391 392 393 394 395
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| string | 返回当前元素名称。 |
Z
zengyawen 已提交
396 397 398 399 400 401 402 403


### getNamespace

getNamespace(): string

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

Z
zengyawen 已提交
404 405 406 407 408
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| string | 返回当前元素的命名空间。 |
Z
zengyawen 已提交
409 410 411 412 413 414 415 416


### getPrefix

getPrefix(): string

获取当前元素前缀。

Z
zengyawen 已提交
417 418 419 420 421
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| string | 返回当前元素前缀。 |
Z
zengyawen 已提交
422 423 424 425 426 427 428 429


### getText

getText(): string

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

Z
zengyawen 已提交
430 431 432 433 434
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| string | 返回当前事件的文本内容。 |
Z
zengyawen 已提交
435 436 437 438 439 440 441 442


### isEmptyElementTag

isEmptyElementTag(): boolean

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

Z
zengyawen 已提交
443 444 445 446 447
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| boolean | 返回true,当前元素为空元素。 |
Z
zengyawen 已提交
448 449 450 451 452 453 454 455


### isWhitespace

isWhitespace(): boolean

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

Z
zengyawen 已提交
456 457 458 459 460
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| boolean | 返回true,当前文本事件仅包含空格字符。 |
Z
zengyawen 已提交
461 462 463 464 465 466 467 468


### getAttributeCount

getAttributeCount(): number

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

Z
zengyawen 已提交
469 470 471 472
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| number | 当前开始标记的属性数。 |
Z
zengyawen 已提交
473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491


## EventType

事件枚举。

| 名称 | 枚举值 | 说明 |
| -------- | -------- | -------- |
| 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 | 空白事件。 |