所以,我有一个整数数组。我想总结一下。但不是整个数组,而是直到另一个变量指定的数组中的位置。
例如。这就是我的阵容:
<xsl:variable name="myArray" as="xs:int*">
<Item>11</Item>
<Item>22</Item>
<Item>33</Item>
<Item>44</Item>
<Item>55</Item>
<Item>66</Item>
<Item>77</Item>
<Item>88</Item>
</xsl:variable>
这就是我的职位变量:
<xsl:variable name="myPosition" as="xs:int*">3</xsl:variable>
我期待结果66。 (因为:$ myArray [1] + $ myArray [2] + $ myArray [3] = 11 + 22 + 33 = 66)
听起来很简单,但我找不到解决方案。
我想,我需要“sum”函数以及“for”和“return”表达式。但我必须承认我不理解我发现的任何例子和说明。
答案 0 :(得分:0)
我认为您使用的是XSLT 2.0,因为在您的示例xslt中,xlst 1.0中不支持某些构造。因此,只要您声明Temporary trees,就应该很容易。
我认为你可以通过这种方式非常简单地<xsl:value-of select="sum($myArray[position() <= $myPosition])" />
答案 1 :(得分:0)
当应用于任何XML输入时,此XSL模板应该可以工作。它使用EXSLT扩展函数exlst:node-set将您的变量转换为节点集。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exslt="http://exslt.org/common">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:variable name="myArray" as="xs:int*">
<Item>11</Item>
<Item>22</Item>
<Item>33</Item>
<Item>44</Item>
<Item>55</Item>
<Item>66</Item>
<Item>77</Item>
<Item>88</Item>
</xsl:variable>
<xsl:variable name="myPosition" as="xs:int*">3</xsl:variable>
<!-- Converts the myArray variable (a result-tree fragment) to a node-set and then sums over all those in positions up to and including myPosition value. -->
<xsl:template match="/">
<xsl:value-of select="sum(exslt:node-set($myArray)/Item[position() <= $myPosition])"/>
</xsl:template>
</xsl:stylesheet>
您可以在行动here中看到它。