HarmonyOS xml解析异常
以下xml数据,调用convertToJSObject方法解析出来的数据是undefined。
<XMLBODY>
<Map id="opdata">
<Field id="CloudTipsResponseCode">0</Field>
<Map id="cloudKey">
<Field id="CLOUDID">8888202108174408</Field>
<Field id="URL"><![CDATA[1801]]></Field>
<Field id="URLTYPE">XLT1801</Field>
<Field id="ALERTTEXT"><![CDATA[9]]></Field>
<Field id="PRODTYPE">理财¥5m1&8R6e¥理财</Field>
<Map id="ACTION">
<Field id="forceLoginFlag"></Field>
<Field id="targetMenuID"></Field>
<Field id="targetParams"><![CDATA[]]></Field>
</Map>
<Field id="ACTIONTYPE">native_returnToTargetMenu</Field>
</Map>
</Map>
</XMLBODY>
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
xml解析代码如下:
let conv = new convertXml.ConvertXML()
let obj: object = conv.convertToJSObject(xmlStr, convertOptions)
let elements: Element[] = obj['_elements_'] as Element[]
- 1.
- 2.
- 3.
完整xml解析代码如下:
import convertXml from '@ohos.convertxml';
interface Attributes {
id: string
}
interface Element {
_type_: string;
_name_: string;
_text_?: string;
_cdata_?: string;
_attributes_?: Attributes;
_elements_: Element[]
}
let convertOptions: convertXml.ConvertOptions = {
trim: true,
declarationKey: "_declaration_",
instructionKey: "_instruction_",
attributesKey: "_attributes_",
textKey: "_text_",
cdataKey: "_cdata_",
doctypeKey: "_doctype_",
commentKey: "_comment_",
parentKey: "_parent_",
typeKey: "_type_",
nameKey: "_name_",
elementsKey: "_elements_"
}
function depXml(elements: Element[], rootName?: string): string | object {
let resultXml: string | object = new Object();
if (!elements) {
return '';
}
// 解析xml中数组,只能解决数组中元素相同,没有attributes的场景
if (elements.length > 1 && elements.every(item => item._type_ === 'element'
&& item._name_ === elements[0]._name_ && !item._attributes_)) {
let resultArray: object[] = new Array()
elements.forEach(item => {
let itemObj = depXml(item._elements_) as object
resultArray.push(itemObj)
});
return resultArray
}
elements.forEach(item => {
if (rootName && item._name_ === rootName) {
resultXml = depXml(item._elements_)
return;
}
if (item._type_ === 'element' && item._attributes_) {
resultXml[item._attributes_.id] = depXml(item._elements_)
} else if(item._type_ === 'element' && item._name_ && item._elements_) {
resultXml[item._name_] = depXml(item._elements_)
} else if (item._type_ === 'text') {
if (item._text_ != undefined) {
resultXml = item._text_
}
} else if (item._type_ === 'cdata') {
try {
if (item._cdata_ != undefined) {
if (!isNumeric(item._cdata_)) {
resultXml = JSON.parse(item._cdata_)
}else {
resultXml = item._cdata_
}
}
} catch (e) {
if (item._cdata_ != undefined) {
resultXml = item._cdata_
}
}
}
})
return resultXml;
}
export default class ParseXML {
static jsonFromXML(xmlStr: string): string {
try {
let conv = new convertXml.ConvertXML()
let obj: object = conv.convertToJSObject(xmlStr, convertOptions)
let elements: Element[] = obj['_elements_'] as Element[]
let rootElementName = elements[0]._name_
// 解析xml
let res = depXml(elements, rootElementName)
let responseData = JSON.stringify(res)
return responseData
} catch (e) {
throw e as Error
}
}
}
// 判断字符串是否纯数字,由于大数转json精度丢失,纯数字时不转json
function isNumeric(str: string): boolean {
return /^\d+$/.test(str)
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
- 88.
- 89.
- 90.
- 91.
- 92.
- 93.
- 94.
- 95.
- 96.
- 97.
- 98.
- 99.
- 100.
HarmonyOS
赞
收藏 0
回答 1
相关问题
HarmonyOS xml解析失败
618浏览 • 1回复 待解决
HarmonyOS xml解析工具
733浏览 • 1回复 待解决
HarmonyOS 如何解析xml文件
796浏览 • 1回复 待解决
HarmonyOS json解析异常
1238浏览 • 1回复 待解决
鸿蒙怎么解析XMl文件,三层XML结构,救命啊
4038浏览 • 1回复 待解决
HarmonyOS 是否支持根据指定私钥解析文件内容并进行xml解析
750浏览 • 1回复 待解决
HarmonyOS xml解析能否提供更简单的方法?
938浏览 • 1回复 待解决
xml文件数据解析 ,都有哪些步骤?
1547浏览 • 1回复 待解决
xml解析库能力,但是xml转json的也存在问题,如何解决。
1712浏览 • 1回复 待解决
怎样实现XML标签和标签值的解析?
967浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙如何高效解析和转换XML?
882浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙XML解析标签和标签值
892浏览 • 1回复 待解决
鸿蒙 | Jar包中解析xml文件为空值。
8368浏览 • 1回复 待解决
#鸿蒙学习大百科#如何解析解析XML标签和标签值?
1019浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何解析XML标签和值?
890浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何解析XML属性和属性值?
891浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何解析XML事件类型和元素深度?
876浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙中解析XML属性及其值?
1186浏览 • 1回复 待解决
能否给出一个解析数据量大的XML文件方法
1502浏览 • 1回复 待解决
HarmonyOS url中存在空格和|符号 解析成uri异常
1695浏览 • 1回复 待解决
#鸿蒙学习大百科#如何解析XML属性和属性值?
1119浏览 • 1回复 待解决
#鸿蒙学习大百科#如何解析XML事件类型和元素深度?
1231浏览 • 1回复 待解决
解析xml文件时,如何判断是否是不可见字符?比如换行符 \n
2756浏览 • 1回复 待解决
#鸿蒙通关秘籍#解析XML文本中包含中文字符时如何避免乱码?
942浏览 • 1回复 待解决
编辑XML文件时报错:Unknown HarmonyOS XML attribute怎么回事?
7767浏览 • 1回复 待解决
根据提供的xml发现存在需要替换的实体引用&,具体文档参考文档的实体部分:https://developer.mozilla.org/zh-CN/docs/Web/XML/XML_introduction