0

特定の名前のノードの出現をカウントする方法がわかりません。

これは私の構造です:

<xsl:variable name="pageType" select="/verticaldata/context/querystring/parameter[@name = 'type']"/>

<xsl:template match="/">
    <xsl:if test="number(/verticaldata/contents/@totalcount) > 0">
        <xsl:apply-templates select="verticaldata/contents/content"/>
    </xsl:if>
</xsl:template>

<xsl:template match="content">
    <xsl:variable name="itemType" select="contentdata/type">
    <xsl:if test="$pageType = $itemType">
        <xsl:call-template name="displayItem"/>
    </xsl:if>
</xsl:template>

<xsl:template name="displayItem">
    <!-- Here I want to show the item number in the id -->
    <div class="item">
        <xsl:attribute name="id">
            <xsl:value-of select="count(preceding-sibling::content)"/>
        </xsl:attribute>

        <!-- Item renders here -->

    </div>
</xsl:template>

私は position() と count(preceding-sibling::content) を試しましたが、それらはすべて「タイプ」チェックを通過したアイテムの数ではなく、合計数を示しています。以前に作成された「displayItem」ノードの数を取得するにはどうすればよいですか?

これは可能ですか?

// ダニエル

4

1 に答える 1

1

あなたがする必要があるのは、前の兄弟コードを変更して、xpath式を使用してコンテンツタイプをチェックすることだと思います

<xsl:value-of select="count(preceding-sibling::content[contentdata/type = $pageType])"/>

実際、xsl:apply-templatesで同じプリンシパルを使用できます。

<xsl:apply-templates select="verticaldata/contents/content[contentdata/type = $pageType]"/>

これにより、一致するテンプレートのxsl:ifをなくすことができます。つまり、displayItem の名前付きテンプレートも不要になる可能性があります。

<xsl:variable name="pageType" select="/verticaldata/context/querystring/parameter[@name = 'type']"/>

<xsl:template match="/">
    <xsl:if test="number(/verticaldata/contents/@totalcount) > 0">
        <xsl:apply-templates select="verticaldata/contents/content[contentdata/type = $pageType]"/>
    </xsl:if>
</xsl:template>

<xsl:template match="content">
    <div class="item">
        <xsl:attribute name="id">
            <xsl:value-of select="count(preceding-sibling::content[contentdata/type = $pageType])"/>
        </xsl:attribute>
          <!-- Item renders here -->
    </div>
</xsl:template>

余談ですが、属性値テンプレートを使用して、ここで div の ID を設定できます

<div class="item" id="{count(preceding-sibling::content[contentdata/type = $pageType])}">

中括弧は、文字どおりに出力されるのではなく、評価される式を示します。

于 2013-04-17T07:15:56.333 に答える