如何生成自定义XML头并修复DataWeave脚本的XML标签问题?
问题解决:修正DataWeave生成的XML声明与根标签
问题分析
当前脚本存在两个核心问题:
- XML声明不符合要求:缺少
standalone="yes"参数,且生成的声明使用了单引号 - 根标签写法错误:将XML属性直接拼接在标签名中,导致根标签格式混乱,同时未匹配期望的
<admin>根标签结构
修正后的DataWeave脚本
%dw 2.0 output application/xml encoding="UTF-8" writeDeclaration=true standalone="yes" --- { admin @( xmlns:xsi: "http://www.w3.org/2001/XMLSchema-instance", xsi#noNamespaceSchemaLocation: "csm_admin.xsd" ): { add: (payload.result.data map (item) -> { data: { "@firstName": item[0], lastName: item[1], age: item[2] } }) } }
关键修改说明
- XML声明修正:在
output指令中添加standalone="yes"参数,DataWeave会自动生成带双引号、包含standalone="yes"的标准XML声明 - 根标签与属性修正:
- 使用
admin作为根标签名,匹配期望输出的开头标签结构 - 通过
@()语法为根标签添加XML属性,其中xsi:noNamespaceSchemaLocation需要用#转义冒号,避免被错误解析为命名空间前缀
- 使用
- 简化逻辑:移除了不必要的
convertJsonToXml递归函数,payload.result.data本身就是数组,直接用map处理即可
生成的正确输出
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <admin xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="csm_admin.xsd"> <add> <data> <@firstName>jane</@firstName> <lastName>ALDANA</lastName> <age>21</age> </data> </add> <add> <data> <@firstName>Emma</@firstName> <lastName>EDWARDS</lastName> <age>23</age> </data> </add> </admin>
注:你提供的期望输出中闭合标签为
</Input>,这属于笔误,标准XML要求闭合标签必须与开头标签名一致,上述脚本已按规范生成对应</admin>闭合标签
内容的提问来源于stack exchange,提问作者james11
相关产品推荐
相关产品推荐

