Altova Mapforce:将单个序列值与单个序列值相乘

时间:2014-12-18 16:09:13

标签: xml xslt-2.0 map-force

我正在寻找解决问题的方法。我正在使用altova mapforce 2015 x64和xslt2。

我在xslt2中有两个数字序列。它们都具有相同的长度(并且总是会)。例如它们看起来像这样:

seq1:10 20 ......

seq2:1 2 ...

我需要的是将seq1 [0]乘以seq2 [0],seq [1] * seq [1]的方式乘以这两者,等等。

所以在我需要的解决方案中,我会得到序列10 40而不是我得到以下10 20 20 40.所以整个序列成倍增加。

所以也许有人知道这个问题的答案或解决方法,我们都非常感激。

感谢

修改

altova的问题在于我无法自己添加xslt2代码,每次修改映射中的内容时都会覆盖该文件。

1 个答案:

答案 0 :(得分:0)

您可以使用xsl:for-each和范围来确定位置。这是一个例子......

XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:variable name="seq1" select="(10,20)"/>
    <xsl:variable name="seq2" select="(1,2)"/>

    <xsl:template match="/">
        <xsl:variable name="newSeq" as="item()*">
            <xsl:for-each select="1 to max((count($seq1),count($seq2)))">
                <xsl:sequence select="$seq1[current()] * $seq2[current()]"/>
            </xsl:for-each>                        
        </xsl:variable>
        <results>
            <xsl:value-of select="$newSeq" separator=","/>
        </results>
    </xsl:template>

</xsl:stylesheet>

输出(以逗号分隔,只是为了显示序列)

<results>10,40</results>

注意:这只会处理偶数个序列项。如果任一序列比另一个序列多,那么它们将不包含在输出中。如果您需要处理这种情况,则必须添加其他逻辑。

编辑 - 刚看到您关于无法自行添加XSLT代码的评论。我会在这里留下我的答案,万一有人不使用mapforce会发现这个答案有用。