0

私の問題の解決策を探しています。xslt2 で altova mapforce 2015 x64 を使用しています。

xslt2 には 2 つの数列があります。どちらも同じ長さです (そして常に同じです)。たとえば、次のようになります。

seq1: 10 20 ...

seq2: 1 2 ...

私が必要とするのは、seq1[0] に seq2[0]、seq[1]*seq[1] などを掛ける方法でこれら 2 つを掛けることです。

したがって、必要なソリューションでは、シーケンス 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 に答える