如何移除XML输出中的特殊字符?DataWeave转换技术咨询
XML转换特殊字符处理方案
问题核心
你在使用DataWeave将JSON转XML时,遇到特殊字符(如输入里的&)被自动转义的问题,需要输出保留原始值,同时想了解如何修剪或移除负载中的特殊字符。
一、保留原始值(禁止转义)
注意:XML语法规范要求&、<、>等字符必须转义,直接输出未转义的特殊字符会生成不符合规范的XML,可能导致下游解析失败。如果业务场景确实需要强制保留原始字符串,可修改输出配置:
将脚本的输出行改为:
output application/xml escapeXML=false
完整脚本:
%dw 2.0 output application/xml escapeXML=false --- { "Order": { id: { Detail: { Line: payload.Order.Line map { frame: { Desc: $.Desc, DescDeatails: $.buyerDesc } } } } } }
提醒:非必要不建议关闭转义,这会破坏XML的合法性。如果下游系统遵循XML标准,转义后的
&会被自动解析为&,无需额外处理。
二、修剪/移除特殊字符的方法
DataWeave提供字符串处理函数,可按需移除或修剪特殊字符:
1. 移除指定特殊字符
用replace函数匹配目标字符替换为空,比如移除&:
Desc: $.Desc replace /&/ with ""
2. 保留合法字符(移除所有非指定字符)
只保留字母、数字和空格,移除其他所有字符:
Desc: $.Desc replace /[^a-zA-Z0-9 ]/ with ""
3. 修剪首尾空白+移除特殊字符
结合trim()函数处理首尾空白,再移除特殊字符:
Desc: $.Desc trim() replace /&/ with ""
带字符移除的完整脚本示例
%dw 2.0 output application/xml escapeGT=true --- { "Order": { id: { Detail: { Line: payload.Order.Line map { frame: { Desc: $.Desc replace /&/ with "", DescDeatails: $.buyerDesc trim() } } } } } }
内容的提问来源于stack exchange,提问作者james11
相关产品推荐
相关产品推荐

