我有一个SOAP请求信封,看起来像这样:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tsh="http://mulesoft.org/tshirt-service">
<soapenv:Header>
<tsh:AuthenticationHeader>
<apiKey>?</apiKey>
</tsh:AuthenticationHeader>
</soapenv:Header>
<soapenv:Body>
<tsh:OrderTshirt>
<size>xxl</size>
<email>abcd.@dfg.com</email>
<name>xyz</name>
<address1>aaaa</address1>
<address2>asdf</address2>
<city>werty</city>
<stateOrProvince>sdd</stateOrProvince>
<postalCode>111111</postalCode>
<country>India</country>
</tsh:OrderTshirt>
</soapenv:Body>
</soapenv:Envelope>
现在,我需要解析<tsh:OrderTshirt>
的所有子元素,即在解析输出之后应该是这样的:
<tsh:OrderTshirt>
<size>xxl</size>
<email>abcd.@dfg.com</email>
<name>xyz</name>
<address1>aaaa</address1>
<address2>asdf</address2>
<city>werty</city>
<stateOrProvince>sdd</stateOrProvince>
<postalCode>111111</postalCode>
<country>India</country>
</tsh:OrderTshirt>
我想通过在Mule的命名空间管理器中声明命名空间来解析一个元素。 (提到reading soap header element in payload)。
不确定如何使用它的子元素解析节点。
请分享您的想法:)
答案 0 :(得分:0)
取决于你想要实现的目标。 需要将主体发送到SOAP Web服务吗?
或者您想要提取值?
使用DataWeave可以轻松实现,并且代码中不需要额外的命名空间声明。
XML将是您的有效负载,您可以通过以下方式引用正文:
%dw 1.0
%output application/xml
---
payload.Envelope.Body
但是它会在顶部输出一个额外的XML标头。
看看如何删除它:
https://forums.mulesoft.com/questions/51394/remove-xml-definition-from-dataweave-output.html
否则使用名称空间声明并使用Set Payload作为值使用引用XML主体的Xpath表达式,以便成为有效负载。