我的响应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>
感谢您的时间!
答案 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>
感谢所有的时间。谢谢!