Mule:如何使用Web服务的响应xml中的部分xml数据设置变量

时间:2016-05-03 14:20:27

标签: mule

我的响应xml如下,来自Web服务使用者。我想将Response节点提取到一个变量中并在另一个子流中使用它(转换消息输入以向其添加cdata标记)。响应xml的请求部分将在同一个流中用于使用dataweave进行的一些转换。当使用xpath(#[xpath3(' // GetTransactionResponse / GetTransactionResult / Response')])检索时,该变量为空,因为它是一个带有xml struture的节点。非常感谢任何解决方案。

<?xml version="1.0" encoding="UTF-8"?>
<GetTransactionResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <GetTransactionResult>
    <Request>
      <Security>
        <SystemUsername>53A5949A</SystemUsername>
        <SystemPassword/>
        <SystemID/>
      </Security>
    </Request>
    <Response>
        <Scheme>
            <Ins>
              <InsReference>200</InsReference>
              <InsNumber>200</InsNumber>
              <InsName/>
            </Ins>
      </Scheme>
    </Response>
  </GetTransactionResult>
</GetTransactionResponse>

感谢您的时间!

4 个答案:

答案 0 :(得分:0)

您的XML包含的不是有效的XML,因为它的起始和结束标记不匹配...例如: -

<InsReference>200</InsurerReference>
<InsNumber>200</InsurerNumber>

但是,如果您使表达式的工作方式如下#[xpath3('/GetTransactionResponse/GetTransactionResult/Response')]

答案 1 :(得分:0)

通过在数据编织中使用其他目标来获取变量响应的另一种方法。并使用以下脚本

%dw 1.0
%output application/xml
---
Response : payload.GetTransactionResponse.GetTransactionResult.Response

答案 2 :(得分:0)

您可以将响应转换为json并通过json表达式设置变量。

<flow name="xmlparserFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/xml" allowedMethods="POST" doc:name="HTTP"/>
        <dw:transform-message metadata:id="864f45d9-f193-4e82-8f9f-f689a2e13450" doc:name="Transform Message">
            <dw:set-payload><![CDATA[%dw 1.0
%var response=payload.GetTransactionResponse.GetTransactionResult.Response.Scheme.Ins
%output application/json
---
{
    reference: response.InsReference,
    number: response.InsNumber,
    name: response.InsName
}]]></dw:set-payload>
        </dw:transform-message>
        <set-variable variableName="reference" value="#[json:reference]" doc:name="Set Variable"/>
        <logger message="#[message]" level="INFO" doc:name="Logger"/>
        <object-to-string-transformer doc:name="Object to String"/>
    </flow>

希望这会有所帮助。

答案 3 :(得分:0)

我最终可以通过在dataweave中设置Response和Request变量来实现,如下所示:

<dw:transform-message doc:name="Transform Message">
            <dw:set-payload><![CDATA[%dw 1.0
%output application/xml
---
payload]]></dw:set-payload>
            <dw:set-variable variableName="Request"><![CDATA[%dw 1.0
%output application/xml
---
{
    Request: payload.GetTransactionResponse.GetTransactionResult.Request
}]]></dw:set-variable>
            <dw:set-variable variableName="Response"><![CDATA[%dw 1.0
%output application/xml
---
{

    Response: payload.GetTransactionResponse.GetTransactionResult.Response
}]]></dw:set-variable>
        </dw:transform-message>

感谢所有的时间。谢谢!