xslt:总结一个整数数组的for

时间:2013-08-23 11:02:55

标签: arrays xslt xpath sum xquery

所以,我有一个整数数组。我想总结一下。但不是整个数组,而是直到另一个变量指定的数组中的位置。

例如。这就是我的阵容:

<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”表达式。但我必须承认我不理解我发现的任何例子和说明。

2 个答案:

答案 0 :(得分:0)

我认为您使用的是XSLT 2.0,因为在您的示例x​​slt中,xlst 1.0中不支持某些构造。因此,只要您声明Temporary trees,就应该很容易。

我认为你可以通过这种方式非常简单地<xsl:value-of select="sum($myArray[position() &lt;= $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() &lt;= $myPosition])"/>
    </xsl:template>

</xsl:stylesheet>

您可以在行动here中看到它。