質問

私は(位置を使用し、この時点で、このようなXSLでネストされた2つのループを持っている)が、それは私が必要なものではありません。

<xsl:for-each select="abc">
  <xsl:for-each select="def">
   I wanna my variable in here increasing fluently 1,2,3,4,5.....n
not like 1,2,3,1,2,3
  </xsl:for-each>
</xsl:for-each>

あなたが私にこのスタブのためのいくつかのアイデアを与えることができます。ありがとうございました!

役に立ちましたか?

解決

XSLを使用すると、問題は、あなたが(それはより多くのあなたが設定していることに一定のようなものだ)変数を変更することはできませんです。だから、カウンタ変数をインクリメントすることはできません。

不器用な回避策は、順次カウントを取得するために(1,2,3,4、...)を取得する位置()「ABC」タグの反復を取得するには、位置への別の呼び出しを()を呼び出すことであろうネストされた「DEF」タグの繰り返し。あなたはそれが含まれている「DEF」タグの数と「ABC」の繰り返しを乗算する必要があります。これは「不器用」の回避策である理由です。

次のようにXSLがなり、次の2つのネストされた「DEF」のタグを持っていると仮定します:

<xsl:for-each select="abc">
    <xsl:variable name="level1Count" select="position() - 1"/>
    <xsl:for-each select="def">
        <xsl:variable name="level2Count" select="$level1Count * 2 + position()"/>
        <xsl:value-of select="$level2Count" />
    </xsl:for-each>
</xsl:for-each>

他のヒント

だけをループに項目を選択するための方法を変更

<xsl:for-each select="abc/def">
    <xsl:value-of select="position()"/>
</xsl:for-each>

あなたは、特にネストされたループを維持する必要がある場合、このようなさらに別のループを追加することを検討します:

<xsl:variable name="items" select="//abc/def"/>
<xsl:for-each select="abc">
    <xsl:for-each select="def">
        <xsl:variable name="id" select="generate-id()"/>
        <xsl:for-each select="$items">
            <xsl:if test="generate-id()=$id">
                 <xsl:value-of select="position()"/>
            </xsl:if>
        </xsl:for-each>
    </xsl:for-each>
</xsl:for-each>
<xsl:for-each select="abc">
    <xsl:variable name="i" select="position()"/>
    <xsl:for-each select="def">
        <xsl:value-of select="$i" />
    </xsl:for-each>
</xsl:for-each>

このサブ要素の異なる数を扱うpythonquickの答えを拡張したものです。

<xsl:for-each select="abc">  
    <xsl:variable name="level1Position" select="position()"/>
    <xsl:variable name="priorCount" select="count(../abc[position() &lt; $level1Position]/def)"/>  
    <xsl:for-each select="def">
        <xsl:variable name="level2Count" select="$priorCount + position()"/>
        <xsl:value-of select="$level2Count" />
    </xsl:for-each>
</xsl:for-each>

入力:

<root>
    <abc>
        <def>A</def>
        <def>B</def>
        <def>C</def>
    </abc>
    <abc>
        <def>D</def>
        <def>E</def>
    </abc>
    <abc>
        <def>F</def>
    </abc>
    <abc>
        <def>G</def>
        <def>H</def>
        <def>I</def>
    </abc>
</root>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top