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

为现有XML根标签添加ns0命名空间前缀后属性丢失问题

问题:XML根标签添加命名空间前缀后丢失原有属性

我需要为现有XML的根标签添加命名空间及前缀ns0,使用了如下DataWeave代码进行操作,但输出结果中根标签的原有属性全部丢失。请参考以下输入示例与预期输出,求解决方法!

原DataWeave代码

%dw 2.0
output application/xml writeDeclaredNamespaces="All"  
ns ns0 http://Test.Sample.data/1.0
---
ns0#trans: payload.trans

原始XML输入

<?xml version='1.0' encoding='UTF-8'?>
<trans xmlns:ns0="http://Test.Sample.data/1.0" id="1495144" TPId='4aec' change='0' count='1' dateStamp="2024-08-02T03:07:48" effectiveDate="2024-08-01" transId="12447055">
    <data id="FF2AD08D621">
        <StateFlag>0</StateFlag>
        <DCC>B</DCC>
        <LastName>MMNGorthy</LastName>
        <Name>Scott</Name>
        <Structure>NonProfit</Structure>
        <BusinessType>Engineering</BusinessType>
        <meams>AI</meams>
        <Count>0</Count>
        <CTier>000</CTier>
        <CTCond>111</CTCond>
        <CTPl>222</CTPl>
        <DO>1</DO>
        <AuthObject>0</AuthObject>
    </data>
</trans>

预期输出(带ns0前缀且保留属性)

<?xml version='1.0' encoding='UTF-8'?>
<ns0:trans xmlns:ns0="http://Test.Sample.data/1.0" id="1495144" TPId='4aec' change='0' count='1' dateStamp="2024-08-02T03:07:48" effectiveDate="2024-08-01" transId="12447055">
    <data id="FF2AD08D621">
        <StateFlag>0</StateFlag>
        <DCC>B</DCC>
        <LastName>MMNGorthy</LastName>
        <Name>Scott</Name>
        <Structure>NonProfit</Structure>
        <BusinessType>Engineering</BusinessType>
        <meams>AI</meams>
        <Count>0</Count>
        <CTier>000</CTier>
        <CTCond>111</CTCond>
        <CTPl>222</CTPl>
        <DO>1</DO>
        <AuthObject>0</AuthObject>
    </data>
</ns0:trans>

解决方法

原代码ns0#trans: payload.trans仅提取了trans元素的子内容,没有保留其属性。要同时保留属性、子元素并添加命名空间前缀,可通过以下两种方式实现:

方法1:使用update操作符修改原元素

%dw 2.0
output application/xml writeDeclaredNamespaces="All"  
ns ns0 http://Test.Sample.data/1.0
---
payload update {
    case trans at .trans -> ns0#trans @(trans.*@): trans.*
}

方法2:直接构造带属性的命名空间元素

%dw 2.0
output application/xml writeDeclaredNamespaces="All"  
ns ns0 http://Test.Sample.data/1.0
---
ns0#trans @(payload.trans.*@): payload.trans.*

代码说明

  • @(payload.trans.*@):复制原根标签trans的所有属性
  • payload.trans.*:保留原根标签下的所有子元素
  • ns0#trans:为根标签添加指定的命名空间前缀

这样处理后,输出的XML会同时保留原有属性和子内容,并且根标签带上ns0前缀。


内容的提问来源于stack exchange,提问作者Zak01

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:22:37