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

WSO2 XML转JSON问题:单Coll元素强制转为数组

在WSO2中实现XML转JSON时强制单个<ban:Coll>为数组

方法一:自定义XSLT预处理XML

核心思路是先将XML中单个的<ban:Coll>元素包装为节点集合,再执行JSON转换,确保结果为数组结构。

假设原XML结构如下:

<Result xmlns:ban="http://example.com/ban">
  <ban:Coll>
    <Item>1</Item>
  </ban:Coll>
</Result>

对应的XSLT脚本:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ban="http://example.com/ban">
  <!-- 默认复制所有节点与属性 -->
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- 匹配Result节点,处理ban:Coll -->
  <xsl:template match="Result">
    <Result>
      <!-- 用临时容器包裹所有ban:Coll节点 -->
      <xsl:element name="CollContainer">
        <xsl:apply-templates select="ban:Coll"/>
      </xsl:element>
      <!-- 保留Result下的其他节点 -->
      <xsl:apply-templates select="node()[not(self::ban:Coll)]"/>
    </Result>
  </xsl:template>

  <!-- 保留ban:Coll的原始结构 -->
  <xsl:template match="ban:Coll">
    <xsl:copy-of select="."/>
  </xsl:template>
</xsl:stylesheet>

在WSO2 Sequence中先通过XSLT Mediator执行上述转换,再用JSON转换Mediator处理预处理后的XML,最后可通过PayloadFactory将CollContainer重命名为Coll,最终得到Result.Coll数组。

方法二:Script Mediator(JavaScript)直接处理对象

通过JS将XML转为对象后,手动强制Coll字段为数组,再转回JSON:

// 获取当前消息的XML payload
var xmlPayload = mc.getPayloadXML();
// 转换为JS对象
var jsonObj = xmlPayload.toJSON();

// 检查并处理Coll字段
if (jsonObj.Result && jsonObj.Result["ban:Coll"]) {
  var collData = jsonObj.Result["ban:Coll"];
  // 非数组则包装为数组
  if (!Array.isArray(collData)) {
    jsonObj.Result["ban:Coll"] = [collData];
  }
}

// 将处理后的对象设置为消息payload
mc.setPayloadJSON(jsonObj);

注意:需根据XML命名空间确保键名引用正确,比如带前缀的"ban:Coll"。

方法三:配置WSO2 JSON转换强制数组属性

利用WSO2自带的转换属性,无需修改XML结构即可指定节点转为数组:

在Sequence中添加Property Mediator,设置:

  • Name: org.apache.synapse.commons.json.JsonBuilder.force.array
  • Value: ban:Coll
  • Scope: axis2

后续执行XML转JSON操作时,无论<ban:Coll>是单个还是多个,都会被转为数组。如需指定多个节点,可用逗号分隔,例如ban:Coll,OtherNode。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:04:51