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>
xml解析代码如下:
let conv = new convertXml.ConvertXML()
let obj: object = conv.convertToJSObject(xmlStr, convertOptions)
let elements: Element[] = obj['_elements_'] as Element[]
完整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)
}
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS xml解析工具
226浏览 • 1回复 待解决
HarmonyOS xml解析失败
105浏览 • 1回复 待解决
HarmonyOS 如何解析xml文件
270浏览 • 1回复 待解决
HarmonyOS json解析异常
729浏览 • 1回复 待解决
鸿蒙怎么解析XMl文件,三层XML结构,救命啊
3275浏览 • 1回复 待解决
HarmonyOS 是否支持根据指定私钥解析文件内容并进行xml解析
218浏览 • 1回复 待解决
HarmonyOS xml解析能否提供更简单的方法?
382浏览 • 1回复 待解决
xml文件数据解析 ,都有哪些步骤?
1077浏览 • 1回复 待解决
xml解析库能力,但是xml转json的也存在问题,如何解决。
1012浏览 • 1回复 待解决
怎样实现XML标签和标签值的解析?
515浏览 • 1回复 待解决
#鸿蒙学习大百科#如何解析解析XML标签和标签值?
491浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何解析XML标签和值?
341浏览 • 1回复 待解决
鸿蒙 | Jar包中解析xml文件为空值。
7763浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙XML解析标签和标签值
335浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙如何高效解析和转换XML?
336浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何解析XML属性和属性值?
383浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙中解析XML属性及其值?
484浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何解析XML事件类型和元素深度?
288浏览 • 1回复 待解决
能否给出一个解析数据量大的XML文件方法
961浏览 • 1回复 待解决
HarmonyOS url中存在空格和|符号 解析成uri异常
921浏览 • 1回复 待解决
#鸿蒙学习大百科#如何解析XML属性和属性值?
600浏览 • 1回复 待解决
#鸿蒙学习大百科#如何解析XML事件类型和元素深度?
568浏览 • 1回复 待解决
#鸿蒙通关秘籍#解析XML文本中包含中文字符时如何避免乱码?
327浏览 • 1回复 待解决
解析xml文件时,如何判断是否是不可见字符?比如换行符 \n
2246浏览 • 1回复 待解决
编辑XML文件时报错:Unknown HarmonyOS XML attribute怎么回事?
7114浏览 • 1回复 待解决
根据提供的xml发现存在需要替换的实体引用&,具体文档参考文档的实体部分:https://developer.mozilla.org/zh-CN/docs/Web/XML/XML_introduction