
前言在移动开发中XMLExtensible Markup Language虽然不如 JSON 流行但在企业级场景中仍然大量存在——SOAP 接口、RSS 订阅、配置文件、办公文档如 OOXML 格式的 .docx/.xlsx底层都是 XML。处理这些数据时你当然可以手写正则或字符串解析但那意味着你要自己处理嵌套标签、属性、注释、CDATA、实体转义等繁琐细节。HarmonyOS NEXT 提供了ohos.convertxml模块一行 API 就能把 XML 字符串变成结构化的 JavaScript 对象并且通过ConvertOptions精细控制解析行为是否保留属性、是否忽略注释、自定义输出键名等等。本文用一个可交互的XML 解析实验室把ohos.convertxml讲透切换 5 种解析选项、加载 4 种不同场景的 XML 样本、实时查看解析结果。全文含完整可运行代码适合需要在鸿蒙应用中处理 XML 数据的中级开发者。一、ohos.convertxml 概述1.1 模块定位ohos.convertxml是 HarmonyOS 提供的 XML 解析工具位于kit.ArkTS工具库中。核心功能一言蔽之将 XML 字符串转换为 JavaScript 对象。转换后的对象可以直接用JSON.stringify序列化也可以通过点号访问属性极大简化了 XML 数据的读取流程。1.2 核心 APIConvertXML 类从 API 14 开始推荐通过ConvertXML类来调用解析功能importconvertxmlfromohos.convertxml;constconverternewconvertxml.ConvertXML();constresult:Objectconverter.fastConvertToJSObject(xmlString,options);其中options是一个ConvertOptions对象它控制了两类配置行为开关boolean是否去除空白、是否忽略属性/注释/CDATA/指令/声明等输出键名string自定义解析结果中各组成部分的 JSON key 名称fastConvertToJSObject是自 API 14 以来推荐使用的方法之前的convertToJSObject和convert方法均已标记为 deprecated。二、ConvertOptions 详解ConvertOptions接口定义了约 18 个属性下面按用途分类讲解。2.1 行为开关7 个 boolean属性类型默认值说明trimbooleanfalse是否去除文本前后的空白字符ignoreDeclarationboolean?—是否忽略 XML 声明?xml version1.0?ignoreInstructionboolean?—是否忽略处理指令?xxx?ignoreAttributesboolean?—是否忽略元素属性ignoreCommentboolean?—是否忽略 XML 注释!-- --ignoreCDATAboolean?—是否忽略 CDATA 段![CDATA[ ]]ignoreDoctypeboolean?—是否忽略 DOCTYPE 声明注意只有trim是必填属性其余带?的都是可选属性不传则使用默认行为。2.2 输出键名11 个 string这些属性让你自定义解析结果中的 key 名称对于对接不同后端或适配已有代码中的字段名非常有用属性类型默认值说明declarationKeystringdeclaration声明部分的键名instructionKeystringinstruction处理指令的键名attributesKeystringattributes元素属性的键名textKeystringtext文本内容的键名cdataKeystringcdataCDATA 段的键名doctypeKeystringdoctypeDOCTYPE 声明的键名commentKeystringcomment注释的键名parentKeystringparent父节点引用的键名typeKeystringtype节点类型的键名nameKeystringname节点名称的键名elementsKeystringelements子元素列表的键名这些键名在 ArkTS 严格模式下也全都是必填属性。实际使用中保持默认值即可满足绝大多数场景但了解它们的存在很重要——当你需要把解析结果直接适配某个特定 schema 时改键名比写映射逻辑更优雅。三、解析选项的实际效果光看参数表可能不够直观下面用一个真实的 XML 片段演示各选项开关后的效果。3.1 基线全部关闭不 trim不忽略任何内容catalog!-- 这是一个注释 --productidP001name![CDATA[iPhone 15 Pro]]/nameprice8999.00/price/product/catalog所有选项关闭解析结果完整保留注释、属性、CDATA{type:element,name:catalog,elements:[{type:comment,comment: 这是一个注释 },{type:element,name:product,attributes:{id:P001},elements:[{type:element,name:name,elements:[{type:cdata,cdata:iPhone 15 Pro}]},{type:element,name:price,elements:[{type:text,text:8999.00}]}]}]}3.2 开启 ignoreComment注释节点从结果中消失输出更干净。3.3 开启 ignoreAttributesattributes: { id: P001 }不再出现只保留元素名称和子节点。3.4 开启 ignoreCDATACDATA 节点被忽略原本iPhone 15 Pro的内容不再出现在输出中。3.5 开启 trim所有文本节点前后的空白被去除处理从 HTML/XML 格式化字符串中提取数据时非常有用。3.6 开启 ignoreInstruction处理指令?xxx?被忽略。在 RSS 场景中某些 feed 会携带样式表指令?xml-stylesheet?,开启此选项可过滤掉。这些选项可以组合使用——在实际开发中根据数据源的特点精确控制解析行为能省去大量的后处理代码。四、实战XML 解析实验室4.1 整体设计实验室页面包含以下交互区域样本选择区4 个预设 XML 样本书店、RSS、配置文件、简单消息一键切换XML 输入区可编辑的 TextArea支持粘贴自定义 XML解析选项区5 个 Toggle 开关实时切换解析参数结果展示区Scroll 容器展示格式化 JSON 输出解析失败时显示红色错误提示4.2 状态与导入import{router}fromkit.ArkUI;importconvertxmlfromohos.convertxml;import{FontSize,Spacing}from../common/Constants;注意导入方式import convertxml from ohos.convertxml是default import不是从kit.ArkTS的命名导出。这是因为ohos.convertxml模块导出的是一个xml命名空间namespace包含ConvertXML类和ConvertOptions接口。ConvertOptions接口在 ArkTS 严格模式下要求定义好所有必填属性。我们的项目中独立声明了ConvertOpts接口保证与 SDK 完全兼容interfaceConvertOpts{trim:boolean;ignoreDeclaration:boolean;ignoreInstruction:boolean;ignoreAttributes:boolean;ignoreComment:boolean;ignoreCDATA:boolean;ignoreDoctype:boolean;declarationKey:string;instructionKey:string;attributesKey:string;textKey:string;cdataKey:string;doctypeKey:string;commentKey:string;parentKey:string;typeKey:string;nameKey:string;elementsKey:string;}页面核心状态Statexml:stringbookstore.../bookstore;StatejsonOut:string;StateerrorMsg:string;StateoptTrim:booleanfalse;StateoptIgnoreAttrs:booleanfalse;StateoptIgnoreComments:booleanfalse;StateoptIgnoreCDATA:booleanfalse;StateoptIgnoreInstruction:booleantrue;// 默认忽略指令4.3 核心解析逻辑privateparseXml():void{this.errorMsg;try{constopts:ConvertOpts{trim:this.optTrim,ignoreDeclaration:true,ignoreInstruction:this.optIgnoreInstruction,ignoreAttributes:this.optIgnoreAttrs,ignoreComment:this.optIgnoreComments,ignoreCDATA:this.optIgnoreCDATA,ignoreDoctype:true,declarationKey:declaration,instructionKey:instruction,attributesKey:attributes,textKey:text,cdataKey:cdata,doctypeKey:doctype,commentKey:comment,parentKey:parent,typeKey:type,nameKey:name,elementsKey:elements};constconverter:convertxml.ConvertXMLnewconvertxml.ConvertXML();constresult:Objectconverter.fastConvertToJSObject(this.xml,opts);this.jsonOutthis.toJson(result);}catch(e){this.errorMsgXML 解析失败,请检查格式;this.jsonOut;}}几点说明实例化 ConvertXMLnew convertxml.ConvertXML()创建解析器实例调用fastConvertToJSObject执行解析。这和使用静态方法的体验一致但更符合 API 14 的新架构。try-catch 保护XML 格式错误时库会抛出BusinessError错误码 10200002捕获后显示友好提示。ignoreDeclaration和ignoreDoctype固定为true实际业务中几乎不需要 XML 声明和 DOCTYPE所以默认忽略减少输出噪音。toJson(obj: Object): string辅助方法调用JSON.stringify(obj, undefined, 2)输出带缩进的格式化 JSON方便查看层级结构。4.4 四个预设样本privateloadSample(type:string):void{this.errorMsg;if(typebookstore){this.xmlbookstore\n book category技术\n title鸿蒙开发实战/title\n author张三/author\n price59.00/price\n /book\n book category文学\n title江村经济/title\n author费孝通/author\n price38.00/price\n /book\n/bookstore;}elseif(typerss){this.xmlrss version2.0\n channel\n title鸿蒙开发者博客/title\n linkhttps://example.com/link\n description最新鸿蒙开发资讯/description\n item\n titleArkUI 声明式开发/title\n pubDate2026-07-15/pubDate\n /item\n /channel\n/rss;}elseif(typeconfig){this.xmlconfig\n database\n host127.0.0.1/host\n port3306/port\n useradmin/user\n /database\n !-- 缓存配置 --\n cache enabledtrue\n ttl3600/ttl\n /cache\n/config;}else{this.xmlroot\n messageHello 鸿蒙/message\n count42/count\n/root;}this.parseXml();}四个样本覆盖了不同的业务场景bookstore多层级嵌套 属性category演示属性解析rss标准 RSS 2.0 格式演示实际数据格式处理config带注释的配置文件演示ignoreComment效果simple最简单的 XML用于理解基础结构4.5 解析选项 Toggle 控制5 个 Toggle 开关绑定到 5 个State boolean每次切换立即触发parseXml()privateoptions:OptionItem[][{key:optTrim,label:trim 去除空白},{key:optIgnoreAttrs,label:ignoreAttributes 忽略属性},{key:optIgnoreComments,label:ignoreComment 忽略注释},{key:optIgnoreCDATA,label:ignoreCDATA 忽略CDATA},{key:optIgnoreInstruction,label:ignoreInstruction 忽略指令}];在 UI 中使用ForEach渲染每个Toggle通过getOptValue/setOptValue读写对应的State变量Toggle({type:ToggleType.Switch,isOn:this.getOptValue(opt.key)}).selectedColor(#7C3AED).onChange((v:boolean){this.setOptValue(opt.key,v);this.onOptionChange();})getOptValue/setOptValue通过if/else分支映射key到具体State变量——在 ArkTS 严格模式下不能用动态属性名访问this[key]显式分支是最稳妥的做法。4.6 结果展示解析成功时输出用fontFamily(monospace)等宽字体渲染方便阅读 JSON 结构解析失败时显示红色错误卡片if(this.errorMsg.length0){Text(this.errorMsg).fontColor(#DC2626).backgroundColor(#FEE2E2)}else{Scroll(){Text(this.jsonOut).fontSize(12).fontFamily(monospace)}.height(260)}4.7 页面进入时自动解析aboutToAppear():void{this.parseXml();}进入页面即对默认 XML 执行一次解析用户无需手动触发。五、几个实战要点与坑5.1 ConvertXML 类实例化API 14 开始推荐使用new convertxml.ConvertXML()创建解析器实例再调用实例方法fastConvertToJSObject()。旧版的命名空间级函数convertToJSObject和convert已标记deprecated since 14在 API 24 项目中虽然声明文件里还存在但 ArkTS 严格模式下编译器可能无法正确解析。正确用法constconverter:convertxml.ConvertXMLnewconvertxml.ConvertXML();constresult:Objectconverter.fastConvertToJSObject(xml,opts);错误用法编译可能失败constresultconvertxml.convertToJSObject(xml,opts);// ❌5.2 ConvertOptions 的完整属性ArkTS 严格模式要求对象字面量必须对应显式声明的接口或类且接口中的非可选属性必须全部提供。ConvertOptions有 18 个属性其中trim和全部 11 个键名属性都是必填的。漏掉任何一个都会触发编译错误arkts-no-untyped-obj-literals。建议在项目中声明一个与 SDK 接口完全兼容的 options 接口每次都传完整属性。键名属性用默认值即可不影响实际解析语义。5.3 XML 格式错误处理当 XML 字符串格式不合法时比如标签不闭合、属性引号不匹配fastConvertToJSObject会抛出BusinessError错误码为 10200002。建议始终用try-catch包裹解析调用给用户友好的错误提示。try{constresultconverter.fastConvertToJSObject(this.xml,opts);}catch(e){this.errorMsgXML 解析失败,请检查格式;}5.4 忽略声明的默认建议ignoreDeclarationXML 声明?xml version1.0?和ignoreDoctypeDTD 声明在绝大多数业务场景中都是噪音建议设为true。唯一需要声明信息的情况是你要做 XML 格式转换/重写工具才需要保留。5.5 ignoreAttributes 对数据完整性的影响关闭属性解析会让带有属性的元素丢失关键信息。例如productidP001category电子开启ignoreAttributes后id和category都不会出现在结果中。在处理以属性承载核心数据的 XML如 SVG、XAML时务必保持ignoreAttributes: false。六、典型应用场景RSS/Atom Feed 解析读取博客、新闻源的聚合内容提取标题、链接、发布日期配置文件解析处理基于 XML 的服务器配置、数据库连接配置、权限配置等SOAP 接口对接企业系统的 WebService 接口大多基于 XML自动解析响应体SVG 元数据提取读取 SVG 中的图层名、尺寸、关键字等信息跨平台数据交换Android/iOS 应用中常见的 XML 数据格式plist、strings.xml 等在鸿蒙端直接解析处理办公文档处理OOXML 格式.docx/.xlsx本质上是 XML解析 metadata、提取内容等需求可用此 API 作为基础七、小结本文以XML 解析实验室为载体系统讲解了 HarmonyOS NEXT 的ohos.convertxml核心 APIConvertXML类 fastConvertToJSObject方法一行代码将 XML 转为 JS 对象ConvertOptions7 个行为开关控制解析细节11 个键名属性定制输出结构解析选项效果trim、ignoreComment、ignoreAttributes、ignoreCDATA、ignoreInstruction 各自对输出的影响工程要点使用new ConvertXML()实例化非命名空间级函数、ConvertOptions 必须提供所有必填属性、try-catch 防护 XML 格式错误、根据业务场景选择忽略/保留的内容实际应用RSS 解析、配置文件处理、SOAP 接口对接、SVG 元数据提取等JSON 是数据交换的通用语但 XML 仍然深深嵌入企业基础设施。ohos.convertxml让你不必再纠结于标签和属性用结构化对象去思考和处理数据——这才是现代开发该有的体验。