在MapForce中更改XSLT生成

时间:2014-06-16 01:28:35

标签: altova map-force

我有一个奇怪的问题。我在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的生成方式。

1 个答案:

答案 0 :(得分:0)

在MapForce中创建一个过滤器并使用布尔函数(如core:logical functions:equal)来检查local-nameselect)中节点的costOrderHeaderLookupResponse/return/Order是否有本地名称等于值为Order的常量字符串。检查本地名称的功能应该在xslt:xpath functions库中local-name

过滤器应该将您从Orders节点的连接替换为它在第二个XSD中映射到的任何节点。

了解过滤器的工作原理(假设您尚未使用过滤器进行选择)视图http://manual.altova.com/Mapforce/mapforcebasic/index.html?mfffilteringdata.htm