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 回答