Организация элементов XML из определенного ответа - PullRequest
1 голос
/ 21 ноября 2019

У меня есть определенный 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 решить проблему, и если да, то как его реализовать, пожалуйста?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2019

Есть моя конфигурация

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;
};
0 голосов
/ 25 ноября 2019

Насколько я знаю, это может быть достигнуто самим Data-Mapper. Вы должны создать файл конфигурации отображения, чтобы получить эти элементы в том порядке, который вы предпочитаете.

Пожалуйста, обратитесь к документу [1] и создайте конфигурацию отображения из пользовательского интерфейса WSO2 Integration Studio.

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

С уважением,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...