2011-12-28 106 views
3

私は通常この種のものに対してjqueryテンプレートを使用しますが、更新する必要があるXSLTファイルを継承しましたが、特定のテンプレート呼び出しの合計要素数(反復回数)。XSLT for-eachループの要素(反復回数)の合計を取得します

jqueryテンプレートを使用すると、このようなことが起こり、ループしているアセットの総数がわかります。

<span id="${spnID}"> 
    ${GroupName} (${Assets.length}) 
</span> 

ループ内に5つの要素がある場合、これは私に「製品x(5)」を返します。

シンプルなようですが、私はXSLTで同じことをする方法を見つけることができないようです。このような何かが、私は思う:

<span id="{$SpnId}"> 
    <xsl:value-of select="$GroupName"/> (<xsl:value-of select="$total-number-of-elements"/>) 
</span> 
+0

問題が何ですか?入力XMLを提供できますか? –

+0

XPath [カウント機能](http://msdn.microsoft.com/en-us/library/ms256103.aspx)がお探しの製品ですか? – Scott

答えて

8

あなたが反復する項目の合計数を取得するには、その後、いくつかの$set出力count($set)をループしている場合。この入力に反し

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" /> 
    <xsl:template match="/"> 
     <xsl:variable name="set" select="/table/row" /> 
     <xsl:variable name="count" select="count($set)" /> 
     <xsl:for-each select="$set"> 
      <xsl:value-of select="concat(position(), ' of ', $count, '&#xa;')" /> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

:たとえば、このスタイルシートを試してみてください

<table> 
    <row id="1" /> 
    <row id="2" /> 
    <row id="3" /> 
    <row id="4" /> 
    <row id="5" /> 
    <row id="6" /> 
</table> 

出力:我々は/table/rowによって選択されたノードをループとにcount(/table/row)を出力している

1 of 6 
2 of 6 
3 of 6 
4 of 6 
5 of 6 
6 of 6 

注意反復回数を取得する。

+0

それはまさに私が探していたものです。ありがとう! – Aaron

1

ウェインの答えが働き、条件を満たさなければならない場合があります。しかし、単純な状況がある場合は、Last()関数を使用してより効率的に行うことができます。 for-eachが処理されるやいなや、Last()にはセットの上限が含まれます。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" /> 
    <xsl:template match="/"> 
    <xsl:for-each select="/table/row"> 
     <xsl:value-of select="concat(position(), ' of ', last(), '&#xa;')" /> 
    </xsl:for-each> 
</xsl:template> 

同じXMLに対して実行、出力はウェインの結果と同じです。

1 of 6 
2 of 6 
3 of 6 
4 of 6 
5 of 6 
6 of 6 
関連する問題