在dataweave 2.0 Mule4中将XML CDATA格式转换为JSON格式

Posted

技术标签:

【中文标题】在dataweave 2.0 Mule4中将XML CDATA格式转换为JSON格式【英文标题】:Convert XML CDATA format into JSON format in dataweave 2.0 Mule4 【发布时间】:2021-05-22 06:26:21 【问题描述】:

以下是我的示例 XML 响应

<DATA><![CDATA[
<RESULT>0</RESULT>
<Addresses>
<Address>
 ...............
</Address>
<Address>
 ...............
</Address>
<Address>
 ...............
</Address>
</Addresses>

]]></DATA>

我想将其转换为 JSON 对象数组。我使用了下面的代码,但它只是返回 CDATA 字符串,而不是 JSON 格式

%dw 2.0
output application/json encoding="UTF-8"
---
payload

我在 Mule 4 中使用 dataweave 2.0

【问题讨论】:

【参考方案1】:

我按照您的指示进行了操作,并且成功了。 变压器 1:

%dw 2.0 输出应用程序/json

读取(payload.DATA, "application/xml")

变形金刚 2:

%dw 2.0 输出应用程序/java

写入(有效负载,'应用程序/xml')

谢谢 dk

【讨论】:

【参考方案2】:

补充 Salim 的回答,您可以尝试使用以下 DataWeave 表达式来访问 Addresses 元素:

%dw 2.0
output application/json
---
read("<root>" ++ payload.DATA ++ "</root>", "application/xml").root.Addresses

想法是用根节点包装DATA内容,然后用它来访问内部元素。

【讨论】:

【参考方案3】:

试试这个脚本:

输入

<DATA><![CDATA[
<Person>
<RESULT>0</RESULT>
<Addresses>
<Address>
 ...............
</Address>
<Address>
 ...............
</Address>
<Address>
 ...............
</Address>
</Addresses>
</Person>

]]></DATA>

脚本

%dw 2.0
output application/json
---
read(payload.DATA, "application/xml")

输出


  "Person": 
    "RESULT": "0",
    "Addresses": 
      "Address": "\n ...............\n",
      "Address": "\n ...............\n",
      "Address": "\n ...............\n"
    
  

【讨论】:

我已经更新了我的代码。我尝试了您的解决方案,我得到 0 ...' 作为 'application/XML' 原因是:拥有多个根是非法的(结语中的开始标记?)。错误 您的 xml 格式错误。需要有一个根元素,其余的可以嵌套在该根节点下。 XML 不允许多个根元素。 我在回答中更新了您的输入样本。 HTH 这是我得到的 XML 响应。我们可以使用 dataweave 代码添加或删除根元素吗?? 地址是一个数组,地址是对象我需要结果作为对象数组。

以上是关于在dataweave 2.0 Mule4中将XML CDATA格式转换为JSON格式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .Net 2.0/C# 中将 StreamReader 转换为 XMLReader 对象

在 Java 中将 JSON 转换为 XML

Jersey 的 servlet 或过滤器

xml解析之stax

struts中指定编码(使用Filter后仍然乱码)

在 2.0 中将 RDD 转换为 Dataframe