Mule DataWeave 2.0 如何动态生成Web Service请求的XML字符串参数
解决方案
你当前的核心需求是给ns0#DataXML、ns0#OptionsXML两个XML字符串类型的字段填充动态变量,DataWeave 2.0支持两种实现方式:
方法1:直接使用字符串插值(适合结构简单的场景)
DataWeave双引号字符串原生支持$()插值语法,直接把硬编码的固定值替换为对应变量即可,框架会自动处理XML特殊字符的转义:
%dw 2.0 output application/xml ns ns0 http://test.es/IC/SERVICE/ --- { ns0#wsImprXML: { ns0#DataXML: " <root> <exp> <bult> <ci>$(vars.ci)</ci> <nif>$(vars.nif)</nif> <ccc>$(vars.ccc)</ccc> <service>$(vars.serviceId)</service> <product>$(vars.productId)</product> <total>$(vars.totalCount)</total> <price>$(vars.price)</price> </bult> </exp> </root>", ns0#OptionsXML: "<wsOptionsXML> <VersionDataXML>1.0.0</VersionDataXML> <VersionOptionsXML>1.0.0</VersionOptionsXML> <VersionResponseXML>1.1.0</VersionResponseXML> <VersionErrorXML>3.2.0</VersionErrorXML> </wsOptionsXML>" } }
如果变量是数值/日期等非字符串类型,可补充as String做类型转换,比如$(vars.ci as String)。
方法2:先构造XML对象再转字符串(更推荐,适合复杂结构)
如果内部XML结构字段多、变动频繁,建议先按DataWeave标准XML语法构造结构化对象,再用write()函数转成XML字符串,自动校验标签格式、处理转义,避免手动写字符串出现的语法错误:
%dw 2.0 output application/xml ns ns0 http://test.es/IC/SERVICE/ // 构造DataXML内部结构 var dataXmlContent = { root: { exp: { bult: { ci: vars.ci, nif: vars.nif, ccc: vars.ccc, service: vars.serviceId, product: vars.productId, total: vars.totalCount, price: vars.price } } } } // 构造OptionsXML内部结构,有动态值也可直接绑定变量 var optionsXmlContent = { wsOptionsXML: { VersionDataXML: "1.0.0", VersionOptionsXML: "1.0.0", VersionResponseXML: "1.1.0", VersionErrorXML: "3.2.0" } } --- { ns0#wsImprXML: { ns0#DataXML: write(dataXmlContent, "application/xml", {indent: true}), ns0#OptionsXML: write(optionsXmlContent, "application/xml", {indent: true}) } }
内容的提问来源于stack exchange,提问作者Rodolfo
相关产品推荐
相关产品推荐

