0

我有一个奇怪的问题。我正在 MapForce 中生成 XSD 到 XSD 的映射,它是有效的并产生输出。但是,当我们的 DataPower 人员使用 XSLT 时,他们说 XSLT 中的名称空间前缀导致代码在传入消息中找不到节点。

例如,在 XSLT 中,选择是:

<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 生成方式的帮助。

4

1 回答 1

0

在 MapForce 中创建一个过滤器并使用布尔函数(如core:logical functions:equal)检查( )local-name中节点的是否具有等于具有 value 的常量字符串的本地名称。检查本地名称的函数应该在库中作为.selectcostOrderHeaderLookupResponse/return/OrderOrderxslt:xpath functionslocal-name

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

要查看过滤器是如何工作的(假设您还没有使用一个来获得您的选择)查看http://manual.altova.com/Mapforce/mapforcebasic/index.html?mfffilteringdata.htm

于 2014-06-16T23:43:48.473 回答