Re: How to tell the number of distinct attribute values?

Subject: Re: How to tell the number of distinct attribute values?
From: "Nikolai Grigoriev" <grig@xxxxxxx>
Date: Thu, 23 Mar 2000 11:45:01 +0300
Yufei Wang wrote:

> The rule is to re-group the items according to their @period value.
> However, I could not figure out a way to tell how many distinct @period
> values there are.

Try the thing below. I've tested it with XT.

Regards,
Nikolai Grigoriev

RenderX

======================================================

<!-- This template lists all grandchildren items sorted by @period  -->
<!-- and calls a group building template for every first occurrence -->
<!-- of @period value (tested in xsl:if ).                          -->

<xsl:template match="group">
  <group>
  <xsl:for-each select="group/item">
    <xsl:sort select="@period"/>
    <xsl:variable name="year" select="@period"/>

    <!-- Check if this value is mentioned for the first time -->
    <xsl:if test="not (preceding-sibling::item[@period=$year]) 
            and not (../preceding-sibling::group/item[@period=$year])">
      <xsl:apply-templates select="../.." mode="enumerate-items">
        <xsl:with-param name="selected-year" select="$year"/>
      </xsl:apply-templates>
    </xsl:if>

  </xsl:for-each>
  </group>
</xsl:template>


<!-- This template builds a group of items for a given year. -->
<!-- It is applied to the same node as the above one, but    -->
<!-- in a different mode.                                    -->

<xsl:template match="group" mode="enumerate-items">
  <xsl:param  name="selected-year"/>
  <group>
    <xsl:apply-templates select="group/item[@period=$selected-year]" 
                         mode="copy"/>
  </group>
</xsl:template>


<!-- Auxiliary template: when in copy mode, copy everything through -->

<xsl:template match="*|@*|comment()|text()" mode="copy">
  <xsl:copy>
    <xsl:apply-templates select="*|@*|comment()|text()" mode="copy"/>
  </xsl:copy>
</xsl:template>



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread