• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&nbsp;\|&nbsp;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&nbsp;,&nbsp;默认false。 |
368| ignoreNameSpace | boolean | 否 | 是否忽略NameSpace,默认false。 |
369| tagValueCallbackFunction | (name:&nbsp;string,&nbsp;value:&nbsp;string)=&gt;&nbsp;boolean | 否 | 获取tagValue回调函数。 |
370| attributeValueCallbackFunction | (name:&nbsp;string,&nbsp;value:&nbsp;string)=&gt;&nbsp;boolean | 否 | 获取attributeValue回调函数。 |
371| tokenValueCallbackFunction | (eventType:&nbsp;[EventType](#eventtype),&nbsp;value:&nbsp;[ParseInfo](#parseinfo))=&gt;&nbsp;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