1

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

例如。这是我的数组:

<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”表达式。但我必须承认,我没有理解我发现的与这些相关的任何示例和说明。

4

2 回答 2

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>

您可以在这里看到它的实际效果。

于 2013-08-23T11:44:31.387 回答
0

我想您使用的是 XSLT 2.0,因为在您的示例 xslt 中有一些 xlst 1.0 不支持的结构。因此,只要您可以声明Temporary trees ,它应该很容易。

我认为您可以通过这种方式非常简单地做到这一点<xsl:value-of select="sum($myArray[position() &lt;= $myPosition])" />

于 2013-08-23T11:42:54.807 回答