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文件
69浏览 • 1回复 待解决
HarmonyOS json解析异常
540浏览 • 1回复 待解决
鸿蒙怎么解析XMl文件,三层XML结构,救命啊
3045浏览 • 1回复 待解决
HarmonyOS xml解析能否提供更简单的方法?
38浏览 • 1回复 待解决
xml文件数据解析 ,都有哪些步骤?
799浏览 • 1回复 待解决
xml解析库能力,但是xml转json的也存在问题,如何解决。
728浏览 • 1回复 待解决
怎样实现XML标签和标签值的解析?
346浏览 • 1回复 待解决
#鸿蒙学习大百科#如何解析解析XML标签和标签值?
262浏览 • 1回复 待解决
鸿蒙 | Jar包中解析xml文件为空值。
7470浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙XML解析标签和标签值
157浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙如何高效解析和转换XML?
97浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何解析XML标签和值?
133浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何解析XML属性和属性值?
121浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何解析XML事件类型和元素深度?
90浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙中解析XML属性及其值?
137浏览 • 1回复 待解决
能否给出一个解析数据量大的XML文件方法
716浏览 • 1回复 待解决
HarmonyOS url中存在空格和|符号 解析成uri异常
655浏览 • 1回复 待解决
#鸿蒙学习大百科#如何解析XML属性和属性值?
307浏览 • 1回复 待解决
#鸿蒙学习大百科#如何解析XML事件类型和元素深度?
378浏览 • 1回复 待解决
#鸿蒙通关秘籍#解析XML文本中包含中文字符时如何避免乱码?
105浏览 • 1回复 待解决
解析xml文件时,如何判断是否是不可见字符?比如换行符 \n
2088浏览 • 1回复 待解决
栈回溯能力是否支持Rust符号解析,是否支持Rust panic异常处理?
627浏览 • 1回复 待解决
编辑XML文件时报错:Unknown HarmonyOS XML attribute怎么回事?
6969浏览 • 1回复 待解决
HarmonyOS ohos.xml写好xml后怎么以文件形式存起来
82浏览 • 1回复 待解决
HarmonyOS 有没有xml描述的Shape?
51浏览 • 1回复 待解决
根据提供的xml发现存在需要替换的实体引用&,具体文档参考文档的实体部分:https://developer.mozilla.org/zh-CN/docs/Web/XML/XML_introduction