0

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

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

序列1:10 20 ...

序列2:1 2 ...

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

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

所以也许有人知道该问题的答案或解决方法,两者都受到高度赞赏。

谢谢

编辑:

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

4

1 回答 1

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 的人发现这个答案很有用。

于 2014-12-18T16:28:12.353 回答