2016-03-17 10 views
0

входного файла это-XML аудиовходов в dataweave

<A> 
 
    <B> 
 
    <merchant_ref>icici</merchant_ref> 
 
    <transaction_tag>sdfhisdb</transaction_tag> 
 
    <transaction_type>inquiry</transaction_type> 
 
    <method>valuelink</method> 
 
    <order_number>123</order_number> 
 
    <amount>1000</amount> 
 
    <currency_code>CAD</currency_code> 
 
    </B> 
 
    <B> 
 
    <merchant_ref>icici</merchant_ref> 
 
    <transaction_tag>sdfhisdb</transaction_tag> 
 
    <transaction_type>inquiry</transaction_type> 
 
    <method>valuelink</method> 
 
    <order_number>123</order_number> 
 
    <amount>2000</amount> 
 
    <currency_code></currency_code> 
 
    </B> 
 
    <B/> 
 
    <B> 
 
    <merchant_ref>icici</merchant_ref> 
 
    <transaction_tag>sdfhisdb</transaction_tag> 
 
    <transaction_type>inquiry</transaction_type> 
 
    <method>valuelink</method> 
 
    <order_number>123</order_number> 
 
    <amount>4000</amount> 
 
    <currency_code></currency_code> 
 
    </B> 
 
    <B> 
 
    <merchant_ref>icici</merchant_ref> 
 
    <transaction_tag>sdfhisdb</transaction_tag> 
 
    <transaction_type>inquiry</transaction_type> 
 
    <method>valuelink</method> 
 
    <order_number>123</order_number> 
 
    <amount>5000</amount> 
 
    <currency_code></currency_code> 
 
    </B> 
 
</A>

попытался сопоставить, используя приведенную ниже код в dataweave

%output application/xml 
 
    --- 
 
    Inquiry: payload.A.*B mapObject 
 
     { 
 
     \t balanceInquiry: 
 
       { 
 
       \t request: { 
 
        amount:{ 
 
        amount: payload.A.B.amount/1000 as :number,    
 
        currency: payload.A.B.currency_code 
 
          } 
 
         } 
 
       } 
 
     }

Я пытаюсь отображать каждую va lue of B, который находится под A, но каждый раз, когда я получаю то же самое первое в 5 раз, как количество 1.0, должно ли оно измениться до 2.0 4.0 и 5.0

Пожалуйста, исправьте меня Если я делаю что-то неправильно, чтобы достичь всех значений B

ответ

0

Если вы используете mapObject и не определяете параметр (ключ и значение), вы должны использовать его по умолчанию. Ключ определяется по умолчанию как $$ и значение $.

Таким образом, (часть) DataWeave код должен быть:

amount: $.amount/1000 as :number when $.amount != null otherwise 0, 
currency: $.currency_code default "" 
+0

Проблема я получаю ниже выходные в 5 раз 1,0 CAD а значение суммы на входе изменяется 1000 2000 4000 5000, так и в вне положенный я должен получить 1.0 то для следующего 2.0 и так далее – Himanshu

+0

Вы получаете ' 1,0' 5 раз, так как Код DataWeave неверен: 'payload.ABamount'. Замените его '$ .amount', после чего вы получите соответствующее значение. –

+0

становится ниже сообщение об ошибке, : Исключение при выполнении: сумму: $ .amount/1000, как: количество, когда $ .amount ~ = нуль в противном случае 0, ^ Несоответствие типа найдено: имя,: строка требуется: имя,: объект Тип: com.mulesoft.weave.mule.exception.WeaveExecutionException Код: MULE_ERROR - 2 – Himanshu

0

Я не смотрел еще, почему $ .amount не доступен, но сделать некоторые изменения в коде бы заставить его работать. Проверьте ниже -

%dw 1.0 
%output application/xml 
--- 
{ 
Inquiry: payload.A.*B mapObject 
    { 
     balanceInquiry: 
      { 
      request: { 
       amount:{ 
       amount: ($[5]/1000 when $[5] != null otherwise 0) as :number,    
       currency: payload.A.B.currency_code 
         } 
        } 
      } 
    } 
} 

Выход выглядит -

<?xml version='1.0' encoding='windows-1252'?> 
<Inquiry> 
    <balanceInquiry> 
    <request> 
     <amount> 
     <amount>1.0</amount> 
     <currency>CAD</currency> 
     </amount> 
    </request> 
    </balanceInquiry> 
    <balanceInquiry> 
    <request> 
     <amount> 
     <amount>2.0</amount> 
     <currency>CAD</currency> 
     </amount> 
    </request> 
    </balanceInquiry> 
    <balanceInquiry> 
    <request> 
     <amount> 
     <amount>0</amount> 
     <currency>CAD</currency> 
     </amount> 
    </request> 
    </balanceInquiry> 
    <balanceInquiry> 
    <request> 
     <amount> 
     <amount>4.0</amount> 
     <currency>CAD</currency> 
     </amount> 
    </request> 
    </balanceInquiry> 
    <balanceInquiry> 
    <request> 
     <amount> 
     <amount>5.0</amount> 
     <currency>CAD</currency> 
     </amount> 
    </request> 
    </balanceInquiry> 
</Inquiry> 

 Смежные вопросы

  • Нет связанных вопросов^_^