【问题标题】:Arranging XML elements from a specific response从特定响应中排列 XML 元素
【发布时间】:2019-11-21 11:00:30
【问题描述】:

我有一个来自后端服务的特定 XML 响应,如下所示:

<SubscriptionMA>
  <cDRMA>
    <a>1</a>
    <b>2</b>
  </cDRMA>
  <AIRSMA>
    <c>4</c>
    <d>5</d>
  </AIRSMA>
  <PAMMA>
    <e>4</e>
  </PAMMA>
  <cDRMA>
    <a>1</a>
    <b>2</b>
  </cDRMA>
  <PAMMA>
    <e>4</e>
  </PAMMA>
  <AIRSMA>
    <c>4</c>
    <d>5</d>
  </AIRSMA>
</SubscriptionMA>

为了使用 Data Mapper 中介将 XML 转换为 Json 有效负载来获得正确的响应,我注意到我必须重新排序 XML 内容,如下所示:

<SubscriptionMA>
  <cDRMA>
    <a>1</a>
    <b>2</b>
  </cDRMA>
  <cDRMA>
    <a>1</a>
    <b>2</b>
  </cDRMA>
  <AIRSMA>
    <c>4</c>
    <d>5</d>
  </AIRSMA>
  <AIRSMA>
    <c>4</c>
    <d>5</d>
  </AIRSMA>
  <PAMMA>
    <e>4</e>
  </PAMMA>
  <PAMMA>
    <e>4</e>
  </PAMMA>
</SubscriptionMA>

请问有什么解决办法吗? XSLT mediator 是否可以解决问题,如果可以,请问如何实现?

提前致谢。

【问题讨论】:

  • 能否提供您的数据映射器配置?
  • 这是我的数据映射器配置:
  • 我在这里找不到

标签: wso2 wso2esb wso2carbon wso2ei


【解决方案1】:

据我所知,这可以通过Data-Mapper本身来实现, 您必须创建映射配置文件才能按您喜欢的顺序获取这些元素。

请参考文档 [1] 并从 WSO2 Integration studio UI 创建映射配置。

[1] - https://docs.wso2.com/display/ESB500/Data+Mapper+Mediator

问候,

【讨论】:

  • 您好,数据映射器无法满足我的要求。实际上,当其中一个数组重复时,输出只显示遇到的第一个数组的数据。
【解决方案2】:

有我的配置

map_S_subscriptionHistoryMA_S_root = function(){ 
var outputroot={};
var count_i_cDRMA = 0;
var count_i_AIRSMA = 0;
var count_i_PAMMA = 0;
outputroot =  {};
outputroot.subscriberhistory =  {};
outputroot.subscriberhistory.transactions =  {};
outputroot.subscriberhistory.transactions.transaction =  [];

for(i_cDRMA in inputsubscriptionHistoryMA.cDRMA){
outputroot.subscriberhistory.transactions.transaction[count_i_cDRMA] =  {};
outputroot.subscriberhistory.transactions.transaction[count_i_cDRMA].msisdn = inputsubscriptionHistoryMA.cDRMA[i_cDRMA].a;
outputroot.subscriberhistory.transactions.transaction[count_i_cDRMA].attr_debit = inputsubscriptionHistoryMA.cDRMA[i_cDRMA].b;

count_i_cDRMA++;
}

for(i_AIRSMA in inputsubscriptionHistoryMA.AIRSMA){
outputroot.subscriberhistory.transactions.transaction[count_i_AIRSMA] =  {};
outputroot.subscriberhistory.transactions.transaction[count_i_AIRSMA].date = inputsubscriptionHistoryMA.AIRSMA[i_AIRSMA].c;
outputroot.subscriberhistory.transactions.transaction[count_i_AIRSMA].id = inputsubscriptionHistoryMA.AIRSMA[i_AIRSMA].d;

count_i_AIRSMA++;
}

for(i_PAMMA in inputsubscriptionHistoryMA.PAMMA){
outputroot.subscriberhistory.transactions.transaction[count_i_PAMMA] =  {};
outputroot.subscriberhistory.transactions.transaction[count_i_PAMMA].msisdn = inputsubscriptionHistoryMA.PAMMA[i_PAMMA].e;

count_i_PAMMA++;
}


return outputroot;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2021-03-30
    • 2015-08-26
    • 1970-01-01
    相关资源
    最近更新 更多