You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成自定义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]
            }
        })
    }
}

关键修改说明

  1. XML声明修正:在output指令中添加standalone="yes"参数,DataWeave会自动生成带双引号、包含standalone="yes"的标准XML声明
  2. 根标签与属性修正:
    • 使用admin作为根标签名,匹配期望输出的开头标签结构
    • 通过@()语法为根标签添加XML属性,其中xsi:noNamespaceSchemaLocation需要用#转义冒号,避免被错误解析为命名空间前缀
  3. 简化逻辑:移除了不必要的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 22:22:45