如何通过MuleSoft Transform组件从XML提取字符串类型值
解决MuleSoft中XML转JSON及提取字符串类型变量的问题
一、XML载荷转JSON
直接在Transform组件中用DataWeave完成转换,DataWeave会自动映射XML结构到JSON:
%dw 2.0 output application/json --- payload
转换后得到的JSON结果:
{ "TABLES": { "person_ID": "12345" } }
二、提取字符串类型的person_ID变量
问题根源
未指定output时,Transform默认输出为application/xml,但表达式payload.TABLES.person_ID返回的是单独数值(无XML根元素),不符合XML结构规范,因此触发解析错误。指定output text/plain后,得到的是纯文本值——你误以为“无引号就不是字符串类型”,实际Mule中text/plain输出的变量本身就是String类型,只是显示时不会带引号;若要显式确保值为字符串类型,可通过以下两种方法实现:
方法1:显式转换为字符串(推荐)
用DataWeave的as String强制转换类型,同时指定输出为application/java,让变量保持Java String类型:
%dw 2.0 output application/java --- (payload.TABLES.person_ID default "") as String
对应的Transform组件XML配置:
<ee:transform> <ee:variables> <ee:set-variable variableName="person_ID"> <![CDATA[%dw 2.0 output application/java --- (payload.TABLES.person_ID default "") as String]]> </ee:set-variable> </ee:variables> </ee:transform>
方法2:保留text/plain输出,确认字符串类型
如果坚持用text/plain输出,变量本身已是String类型,后续可通过typeOf(vars.person_ID)验证类型。代码示例:
%dw 2.0 output text/plain --- (payload.TABLES.person_ID default "") as String
验证变量类型
在后续Flow中添加Logger组件,使用表达式typeOf(vars.person_ID)输出变量类型,确认结果为String。
内容的提问来源于stack exchange,提问作者stewchicken
相关产品推荐
相关产品推荐

