我正在尝试通过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中的值:header> ns> ns:myheader> ns1:mydata。
是否可以从XSLT中的肥皂标头获得一个值,我需要哪种XPath?
假设您使用 wcf-basichttp 适配器,则可以像想要的那样使用XSLT,但是只有当您将Envelope -- entire <soap:Envelope>
指定为SOAP Body Element的数据选择时。如果您不指定它,则您的标题将从消息主体中删除,并且标题上的XPath语句将是不可能的。
您的另一个选项是从上下文属性InboundHeaders
获得命名空间http://schemas.microsoft.com/biztalk/2006/01/adapters/wcf-properties。适配器默认情况下将SOAP标头值放入InboundHeaders
上下文属性中。如果您需要映射中的上下文值,而无需编排,请尝试研究社区制造的Context Accessor Functoid
。
像您在评论中所要求的那样,在标题值上进行自己的属性促销也是可能的,但在XSLT中不可能。只有添加XML Disassembler Pipeline Component
,然后对整个肥皂消息进行架构,然后在模式上设置促销,最后设置促销;在管道组件的Document schemas
部分中指定架构。我不建议使用这种方法,因为它要求您部署肥皂架构,该模式将使用默认的BizTalk SOAP模式复制。