【问题标题】:xml input mapping in dataweavedataweave 中的 xml 输入映射
【发布时间】:2016-03-17 07:33:24
【问题描述】:

输入文件是-

<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
        {
        	balanceInquiry:
               { 
               	request: {
                    amount:{
                    amount: payload.A.B.amount/1000 as :number,            
                    currency: payload.A.B.currency_code
                           }
                         }
               }
         }

我正在尝试映射 A 下的 B 的每个值,但每次我得到相同的第一件事 5 倍于金额 1.0 是否应该更改为 2.0 4.0 和 5.0

如果我做错了什么以实现 B 的所有价值,请纠正我

【问题讨论】:

    标签: xml mule dataweave anypoint-studio


    【解决方案1】:

    如果使用 mapObject 并且没有定义参数(键和值),那么你应该使用它的默认值。默认情况下,键定义为 $$,值定义为 $

    因此,(部分)DataWeave 代码应该是:

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

    【讨论】:

    • 问题是我得到以下输出 5 次 1.0CAD request> 而输入中的金额值变化为 1000 2000 4000 5000,所以在输出中我应该得到 1.0 然后下一个 2.0 等等跨度>
    • 您得到&lt;amount&gt;1.0&lt;/amount&gt; 5 次,因为DataWeave 代码不正确:payload.A.B.amount。将其替换为$.amount,即可得到相应的关联值。
    • 得到以下错误消息:执行时出现异常:金额:$.amount/1000 为:数字,当 $.amount ~= null 否则为 0,^ 发现类型不匹配:名称,:需要字符串:名称, :object 类型:com.mulesoft.weave.mule.exception.WeaveExecutionException 代码:MULE_ERROR--2
    • ~= 必须是!=
    【解决方案2】:

    我没有详细了解为什么 $.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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-03
      • 1970-01-01
      • 2020-01-27
      • 1970-01-01
      • 2019-01-02
      • 2019-06-23
      相关资源
      最近更新 更多