Altova Mapforce: умножение значений одной последовательности на значения одной последовательности

Я ищу решение моей проблемы. Я использую altova mapforce 2015 x64 с xslt2.

У меня есть две последовательности чисел в xslt2. они оба имеют одинаковую длину (и всегда будут). например, они выглядят так:

секв1: 10 20...

seq2: 1 2...

Что мне нужно, это умножить эти два так, чтобы seq1[0] умножалось на seq2[0], seq[1]*seq[1] и так далее.

поэтому в моем необходимом решении я получил бы последовательность 10 40, вместо этого я получил бы следующие 10 20 20 40. таким образом, все последовательности умножаются.

так что, возможно, кто-то знает ответ или решение этой проблемы, оба высоко ценятся.

Спасибо

РЕДАКТИРОВАТЬ:

проблема с altova заключается в том, что я не могу добавить код xslt2 самостоятельно, файл будет перезаписываться каждый раз, когда я изменяю что-то в отображении.

1 ответ

Решение

Вы могли бы использовать 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, сочтет этот ответ полезным.

Другие вопросы по тегам