我正在尝试通过xslt映射以下格式的消息:
<soapenv:Envelope xmlns:soapenv="..." ns...>
<soapenv:Header>
<ns:myHeader>
<ns1:myData>VALUE_I_WANT</ns1:myData>
</ns:myHeader>
</soapenv:Header>
<soapenv:Body>
<ns2:otherData>
...
</ns2:otherData>
</soapenv:Body>
</soapenv:Envelope>
当前,我的映射处理了soapenv:Body标记中的所有字段,但是对于我的一个映射节点,我需要soapenv:Header> ns:myHeader> ns1:myData中的值。
是否可以从XSLT中的soap头中获取一个值,我需要哪种类型的xpath来实现?
答案 0 :(得分:1)
假设您使用 WCF-BasicHttp 适配器,则可以按需要使用xslt,但前提是您指定了Envelope -- entire <soap:Envelope>
作为SOAP Body元素的数据选择。如果未指定,则标题将从消息正文中删除,并且标题上的xpath语句将是不可能的。
您的另一个选择是从名称空间为http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties的上下文属性InboundHeaders
获取值。默认情况下,适配器将SOAP标头值放入该InboundHeaders
上下文属性中。如果您需要在没有业务流程的情况下进行映射的上下文值,请尝试查看社区制作的Context Accessor Functoid
。
也可以像对注释中所要求的那样,对标头值进行自己的属性升级,但不能在xslt中进行。仅当您添加XML Disassembler Pipeline Component
,然后为整个肥皂消息创建一个架构,然后在该架构上设置提升,最后;在管道组件的Document schemas
部分中指定架构。我不建议使用这种方法,因为它需要您部署一个Soap模式,该模式将与默认的BizTalk soap模式重复。