# xml文本转换
>  **说明:**
> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
## 导入模块
```
import convertXml from '@ohos.convertxml'
```
## 权限
无
## ConvertXML
### convert
convert(xml: string, options?: ConvertOptions) : Object
转化xml文本为JavaScript对象。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| xml | string | 是 | 传入的xml文本, |
| options | [ConvertOptions](#convertoptions) | 否 | 用户可进行的选项 |
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| string | 处理后返回的JavaScript对象。 |
- 示例:
```
import convertXml from '@ohos.convertxml'
var xml =
'' +
'' +
' Happy' +
' Work' +
' Play' +
'';
var convertxml = new convertXml.ConvertXML();
var result1 = convertxml.convert(xml, {compact: false, spaces: 0});
console.log(result1)
```
## ConvertOptions
| 名称 | 参数类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| trim | boolean | 否 | 是否修剪位于文本前后的空白字符,默认false。 |
| ignoreDeclaration | boolean | 否 | 是否忽略xml写入声明指示,默认false。 |
| ignoreInstruction | boolean | 否 | 是否忽略xml的写入处理指令,默认false。 |
| ignoreAttributes | boolean | 否 | 是否跨多行打印属性并缩进属性,默认false。 |
| ignoreComment | boolean | 否 | 是否忽略元素的注释信息,默认false。 |
| ignoreCdata | boolean | 否 | 是否忽略元素的CData信息,默认false。 |
| ignoreDoctype | boolean | 否 | 是否忽略元素的Doctype信息,默认false。 |
| ignoreText | boolean | 否 | 是否忽略元素的文本信息,默认false。 |
| declarationKey | string | 否 | 用于输出对象中declaration的属性键的名称,默认_declaration。 |
| instructionKey | string | 否 | 用于输出对象中instruction的属性键的名称,默认_instruction。 |
| attributesKey | string | 否 | 用于输出对象中attributes的属性键的名称,默认_attributes。 |
| textKey | string | 否 | 用于输出对象中text的属性键的名称,默认_text。 |
| cdataKey | string | 否 | 用于输出对象中cdata的属性键的名称,默认_cdata。 |
| doctypeKey | string | 否 | 用于输出对象中doctype的属性键的名称,默认_doctype。 |
| commentKey | string | 否 | 用于输出对象中comment的属性键的名称,默认_comment。 |
| parentKey | string | 否 | 用于输出对象中parent的属性键的名称,默认_parent。 |
| typeKey | string | 否 | 用于输出对象中type的属性键的名称,默认_type。 |
| nameKey | string | 否 | 用于输出对象中name的属性键的名称,默认_name。 |
| elementsKey | string | 否 | 用于输出对象中elements的属性键的名称,默认_elements。 |
## XmlSerializer
### constructor
constructor(buffer: ArrayBuffer | DataView, encoding?: string)
XmlSerializer的构造函数。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| buffer | ArrayBuffer \| DataView | 是 | 用于接收写入xml信息的ArrayBuffer \| DataView内存。 |
| encoding | string | 否 | 编码格式。 |
- 示例:
```
import xml form '@ohos.xml'
new XmlSerializer(buffer: ArrayBuffer | DataView, encoding?: string)
var arrayBuffer = new ArrayBuffer(1024);
var bufView = new DataView(arrayBuffer);
var thatSer = new xml.XmlSerializer(bufView);
```
### setAttributes
setAttributes(name: string, value: string):void
设置Attributes方法。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| name | string | 是 | 属性的key值 |
| value | string | 是 | 属性的value值 |
- 示例:
```
import xml form '@ohos.xml'
setAttributes(name: string, value: string)
var thatSer = new xml.XmlSerializer(bufView);
thatSer.setAttributes("importance", "high");
```
### addEmptyElement
addEmptyElement(name: string): void
写入一个空元素。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| name | string | 是 | 该空元素的元素名 |
- 示例:
```
import xml form '@ohos.xml'
addEmptyElement(name: string): void
var thatSer = new xml.XmlSerializer(bufView);
thatSer.addEmptyElement("b"); // =>
```
### setDeclaration
setDeclaration(): void
设置Declaration方法。
- 示例:
```
import xml form '@ohos.xml'
setDeclaration():void
var thatSer = new xml.XmlSerializer(bufView);
thatSer.setDeclaration() // => ;
```
### startElement
startElement(name: string): void
XmlSerializer的构造函数。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| name | string | 是 | 当前元素的元素名 |
- 示例:
```
import xml form '@ohos.xml'
startElement(name:string):void
var arrayBuffer = new ArrayBuffer(1024);
var thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.startElement("notel");
thatSer.endElement();// => '';
```
### endElement
endElement(): void
设置结束元素方法。
- 示例:
```
import xml form '@ohos.xml'
endElement()
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(); // => Happy
```
### setNamespace
setNamespace(prefix: string, namespace: string): void
写入当前元素标记的命名空间。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| prefix | string | 是 | 当前元素及其子元素的前缀 |
| namespace | string | 是 | 当前元素及其子元素的命名空间 |
- 示例:
```
import xml form '@ohos.xml'
setNamespace(prefix:string,namespace:string):void
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();// = >'\r\n';
```
### setCommnet
setCommnet(text: string): void
写入comment属性。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| text | string | 是 | 当前元素的注释内容 |
- 示例:
```
import xml form '@ohos.xml'
setCommnet(text: string):void
var arrayBuffer = new ArrayBuffer(1024);
var thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.startElement("note");
thatSer.setCommnet("Hi!");
thatSer.endElement(); // => '\r\n \r\n';
```
### setCData
setCData(text: string): void
写入CData属性。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| text | string | 是 | CDate属性的内容 |
- 示例:
```
import xml form '@ohos.xml'
setCData(text: string) :void
var arrayBuffer = new ArrayBuffer(1028);
var thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.setCData('root SYSTEM') // => '';
```
### setText
setText(text: string): void
设置Text方法。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| text | string | 是 | text属性的内容 |
- 示例:
```
import xml form '@ohos.xml'
setText(text: string): void
var arrayBuffer = new ArrayBuffer(1024);
var thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.startElement("note");
thatSer.setAttributes("importance", "high");
thatSer.setText("Happy1");
thatSer.endElement(); // => 'Happy1';
```
### setDocType
setDocType(text: string): void
写入DocType属性。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| text | string | 是 | DocType属性的内容 |
- 示例:
```
import xml form '@ohos.xml'
setDocType(text: string):void
var arrayBuffer = new ArrayBuffer(1024);
var thatSer = new xml.XmlSerializer(arrayBuffer);
thatSer.setDocType('root SYSTEM'); // => '';
```
## XmlPullParser
### XmlPullParser
constructor(buffer: ArrayBuffer | DataView, encoding?: string)
创建并返回一个XmlPullParser对象,该XmlPullParser对象传参两个, 第一参数是ArrayBuffer或DataView类型的一段内存,第二个参数为文件格式(默认为UTF-8)
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| buffer | ArrayBuffer \| DataView | 是 | 含有xml文本信息的ArrayBuffer 或者DataView |
| encoding | string | 否 | 编码格式(仅支持utf-8) |
- 示例:
```
import xml form '@ohos.xml'
new (buffer: ArrayBuffer | DataView, encoding?: string)
var strXml =
'' +
'' +
' Happy' +
' Work' +
' Play' +
'';
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);
```
### parse
parse(option: ParseOptions): void
该接口用于解析xml。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| option | [ParseOptions](#parseoptions) | 是 | 用户控制以及获取解析信息的选项。 |
- 示例:
```
import xml form '@ohos.xml'
parse(option: ParseOptions): void
var strXml =
'' +
'' +
' Happy' +
' Work' +
' Play' +
'';
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);
```
## ParseOptions
xml解析选项。
| 名称 | 参数类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| supportDoctype | boolean | 否 | 是否忽略Doctype , 默认false。 |
| ignoreNameSpace | boolean | 否 | 是否忽略NameSpace,默认false。 |
| tagValueCallbackFunction | (name: string, value: string)=> boolean | 否 | 获取tagValue回调函数。 |
| attributeValueCallbackFunction | (name: string, value: string)=> boolean | 否 | 获取attributeValue回调函数。 |
| tokenValueCallbackFunction | (eventType: [EventType](#eventtype), value: [ParseInfo](#parseinfo))=> boolean | 否 | 获取tokenValue回调函数。 |
## ParseInfo
当前xml解析信息。
### getColumnNumber
getColumnNumber(): number
获取当前行号,从1开始。
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| number | 返回当前行号。 |
### getDepth
getDepth(): number
获取元素的当前深度。
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| number | 返回元素的当前深度。 |
### getLineNumber
getLineNumber(): number
获取当前列号,从1开始。
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| number | 返回当前列号。 |
### getName
getName(): string
获取当前元素名称。
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| string | 返回当前元素名称。 |
### getNamespace
getNamespace(): string
获取当前元素的命名空间。
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| string | 返回当前元素的命名空间。 |
### getPrefix
getPrefix(): string
获取当前元素前缀。
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| string | 返回当前元素前缀。 |
### getText
getText(): string
获取当前事件的文本内容。
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| string | 返回当前事件的文本内容。 |
### isEmptyElementTag
isEmptyElementTag(): boolean
判断当前元素是否为空元素。
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| boolean | 返回true,当前元素为空元素。 |
### isWhitespace
isWhitespace(): boolean
判断当前文本事件是否仅包含空格字符。
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| boolean | 返回true,当前文本事件仅包含空格字符。 |
### getAttributeCount
getAttributeCount(): number
获取当前开始标记的属性数。
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| number | 当前开始标记的属性数。 |
## 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 | 空白事件。 |