HarmonyOS 鸿蒙Next ArkTS不支持通过索引访问字段 那通过new convertXml.ConvertXML().convertToJSObject()返回的js对象属性如何访问呢

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next ArkTS不支持通过索引访问字段 那通过new convertXml.ConvertXML().convertToJSObject()返回的js对象属性如何访问呢

ArkTS不支持通过索引访问字段,那通过new convertXml.ConvertXML().convertToJSObject()返回的js对象属性如何访问呢

2 回复

可以参考以下demo实现:

import { convertxml } from '[@kit](/user/kit).ArkTS';
function test() {
   try {
       let xml =
           '<?xml version=""1.0"" encoding=""utf-8""?>' +
           '<note importance=""high"" logged=""true"">' +
           '    <title>Happy</title>' +
           '    <todo>Work</todo>' +
           '    <todo>Play</todo>' +
           '</note>';
       let conv = new convertxml.ConvertXML()
       let options: convertxml.ConvertOptions = {
           trim: false,
           declarationKey: ""_declaration"",
           instructionKey: ""_instruction"",
           attributesKey: ""_attributes"",
           textKey: ""_text"",
           cdataKey: ""_cdata"",
           doctypeKey: ""_doctype"",
           commentKey: ""_comment"",
           parentKey: ""_parent"",
           typeKey: ""_type"",
           nameKey: ""_name"",
           elementsKey: ""_elements""
   }
       let result = JSON.stringify(conv.convertToJSObject(xml, options));
       console.log(result);
       let obj: Record<string, object> = JSON.parse(result)
       console.log('获取version属性结果:' + obj['_declaration']['_attributes']['version'])
   } catch (e) {
       console.log((e as Object).toString());
   }
}
[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
   @State message: string = '点击执行';
   build() {
       Row() {
           Column() {
               Text(this.message)
                   .fontSize(50)
                   .fontWeight(FontWeight.Bold)
                   .onClick(() => {
                       test();
                   })
           }
     .width('100%')
       }
   .height('100%')
   }
}

另外建议在非跨语言调用的场景下,避免使用ESObject,引入明确的类型进行注释。

ESObject使用参考:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-high-performance-programming-V13

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/typescript-to-arkts-migration-guide-V13

在HarmonyOS鸿蒙系统中,使用ArkTS开发时,如果确实存在不支持通过索引访问字段的情况,这通常意味着你需要采用其他方式来访问对象属性。对于通过new convertXml.ConvertXML().convertToJSObject()方法返回的JavaScript对象,你可以使用标准的JavaScript对象属性访问方法。

具体来说,假设convertToJSObject()返回的对象为jsonObject,你可以直接通过属性名来访问其字段,例如:

let xmlConverter = new convertXml.ConvertXML();
let jsonObject = xmlConverter.convertToJSObject(someXmlString);

// 假设jsonObject有一个名为"name"的属性
let name = jsonObject.name;

// 如果属性名存储在变量中
let propName = "name";
let value = jsonObject[propName];

上述代码中,jsonObject.name是直接访问对象属性的方式,而jsonObject[propName]则是通过变量动态访问对象属性的方式。这两种方法都是JavaScript中常用的对象属性访问方法。

如果在使用这些方法时遇到问题,可能是由于返回的jsonObject结构不符合预期,或者convertToJSObject()方法的实现有误。此时,建议检查XML输入字符串和convertToJSObject()方法的实现细节。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部