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, сочтет этот ответ полезным.