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

如何在WSO2 EI中将XML响应转换为指定格式的JSON数组

解决WSO2 Integration Studio 7.2中XML转合并JSON数组的问题

问题场景

你的XML响应包含多个<fields>节点,每个节点下有<listItems>,默认设置messageType=application/json后会生成多个独立JSON对象,但你需要将所有<listItems>的内容合并到同一个JSON数组中。

可行解决方案

方案1:先通过XSLT调整XML结构,再转JSON

先用XSLT Mediator把XML中分散的<listItems>合并为统一节点,再转换为JSON。

步骤:

  1. 创建XSLT文件(比如merge-listitems.xsl),内容如下:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    
    <xsl:template match="/">
        <result>
            <mergedListItems>
                <!-- 遍历所有fields下的listItems节点,复制其所有子内容 -->
                <xsl:for-each select="//fields/listItems/*">
                    <xsl:copy-of select="."/>
                </xsl:for-each>
            </mergedListItems>
        </result>
    </xsl:template>
</xsl:stylesheet>
  1. 在序列中添加XSLT Mediator,引用上述XSLT文件。
  2. 后续添加Property Mediator,设置name=messageType,value=application/json,即可得到合并后的JSON数组。

方案2:使用DataMapper Mediator自定义映射

通过DataMapper直接定义源XML到目标JSON的映射规则,强制将所有<listItems>合并为一个数组。

步骤:

  1. 新建Data Mapping资源:
    • 导入源XML的Schema(可直接从XML示例生成)
    • 定义目标JSON的Schema,比如:
      {
        "type": "object",
        "properties": {
          "mergedList": {
            "type": "array",
            "items": { "type": "string" }
          }
        }
      }
      
  2. 在映射界面,将源XML的//fields/listItems/*节点批量映射到目标JSON的mergedList数组元素。
  3. 在序列中添加DataMapper Mediator,选择你创建的映射配置。

方案3:用Script Mediator写Groovy脚本直接处理

通过脚本直接解析XML并构建目标JSON,灵活性更高。

示例Groovy脚本:

import groovy.json.JsonBuilder
import org.apache.commons.io.IOUtils
import org.w3c.dom.Document
import javax.xml.parsers.DocumentBuilderFactory

// 读取输入XML payload
def xmlContent = IOUtils.toString(inputStream)
def docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder()
def xmlDoc = docBuilder.parse(new ByteArrayInputStream(xmlContent.getBytes()))

// 提取所有listItems下的<item>节点内容(可根据实际XML结构调整)
def itemNodes = xmlDoc.getElementsByTagName("item")
def itemArray = []
for (int i = 0; i < itemNodes.length; i++) {
    itemArray.add(itemNodes.item(i).textContent)
}

// 构建目标JSON
def jsonOutput = new JsonBuilder()
jsonOutput {
    mergedList itemArray
}

// 设置输出payload和消息类型
message.setPayloadContent(jsonOutput.toString())
message.setProperty("messageType", "application/json")

将上述脚本添加到Script Mediator中,替换原来的JSON Transformer即可。

注意事项

  • 如果你的<listItems>是复杂对象(而非单一文本节点),只需调整XSLT或脚本中的处理逻辑,比如复制整个<listItems>节点或构建对象数组。
  • JSON Transformer仅做XML到JSON的直接结构转换,不支持节点合并,所以需要先调整结构或用脚本直接生成目标JSON。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:45:28