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

この XSL テンプレートは、任意の XML 入力に適用されたときに機能するはずです。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 には xlst 1.0 でサポートされていない構成要素が含まれているため、XSLT 2.0 を使用していると思います。したがって、一時的なツリーを宣言できる限り、簡単なはずです。

この方法で非常に簡単にできると思います<xsl:value-of select="sum($myArray[position() &lt;= $myPosition])" />

于 2013-08-23T11:42:54.807 に答える