如何从mule中的Payload XML获取元素值?

时间:2016-10-29 08:22:14

标签: xml mule anypoint-studio

从这个XML我希望获得id并设置在变量中。 示例:OrderID = 4258477000

 <?xml version="1.0" encoding="UTF-8"?>
    <order>
       <id type="integer">4258477000</id>
       <email>khaleed@mmtvbd.com</email>
       <closed-at type="dateTime" nil="true"/>
       <created-at type="dateTime">2016-10-24T21:41:51+06:00</created-at>
       <updated-at type="dateTime">2016-10-24T21:41:52+06:00</updated-at>
    <number type="integer">19</number>
    </order>

3 个答案:

答案 0 :(得分:1)

您可以使用XPATH或dataweave来执行此操作。

Xpath: -

#[xpath3('/*:order/*:id',payload,"STIRNG")]

OR Dataweave: -

<dw:transform-message doc:name="Transform Message">
    <dw:input-payload mimeType="application/xml"/>
    <dw:set-variable variableName="variableName"><![CDATA[%dw 1.0
%output application/java
---
payload.order.id]]>
    </dw:set-variable>
</dw:transform-message> 

希望这有帮助。

答案 1 :(得分:0)

如果您要提取的“id”字段来自附件,那么您首先需要解决的问题是检索xml。单个message.inboundAttachments元素值将返回javax.activation.DataHandler数据类型。您必须将其转换为xml或字符串才能使其可用。

实现这一目标的一种方法是:

  1. 使用@InboundAttachments Annotation(https://docs.mulesoft.com/mule-user-guide/v/3.7/inboundattachments-annotation

  2. 创建客户变换器
  3. 将DataHandler对象转换为字符串

    final InputStream in = dataHandler.getInputStream();
    byte[] byteArray=org.apache.commons.io.IOUtils.toByteArray(in);
    
  4. 提取数据并将其存储到变换器内的变量中,或者将字符串/ xml作为有效负载返回,并在下一个组件上使用xpath或dataweave。

  5. 我知道这有点复杂。

答案 2 :(得分:0)

试试这个:

<set-variable variableName="myvar" value="#[payload.order.id]" doc:name="Variable"/>