我有一个奇怪的问题。我在MapForce中生成XSD到XSD映射,它是有效的并产生输出。但是,当我们的DataPower人员使用XSLT时,他们说XSLT中的命名空间前缀导致代码无法在传入消息中找到节点。
例如在XSLT中,select是:
<xsl:for-each select="ns0:costOrderHeaderLookupResponse/return/ns1:Order">
在传入消息中,名称空间前缀如下:
*snip*
<return>
<ns2:Order BillToID="300850001000" DocumentType="0001"....*snip*>
然而,MapForce正在生成输出,即使名称空间前缀不同也没有错误。
DataPower人员请求代替命名空间前缀,我自定义MapForce以输出这样的节点:
/*[local-name()='Order']
我阅读了MapForce文档并用Google搜索了一段时间,但我没有找到像这样自定义XSLT输出的方法。它可能是C / Java / etc,但我没有找到任何帮助来改变XSLT的生成方式。
答案 0 :(得分:0)
在MapForce中创建一个过滤器并使用布尔函数(如core:logical functions:equal
)来检查local-name
(select
)中节点的costOrderHeaderLookupResponse/return/Order
是否有本地名称等于值为Order
的常量字符串。检查本地名称的功能应该在xslt:xpath functions
库中local-name
。
过滤器应该将您从Orders节点的连接替换为它在第二个XSD中映射到的任何节点。
了解过滤器的工作原理(假设您尚未使用过滤器进行选择)视图http://manual.altova.com/Mapforce/mapforcebasic/index.html?mfffilteringdata.htm