[xsl] How to create index entry in xsl file?

Subject: [xsl] How to create index entry in xsl file?
From: "Kalpana Pathak" <pathak.kalpana@xxxxxxxxx>
Date: Mon, 22 Dec 2008 19:43:04 +0530
Hello everyone,

I would like to generate the indexes in the PDF output. I typed the
following elements in the xsl file, but it is giving me error. Can
someone guide me to what are the attributes/parameters i need to put
in the xsl file to generate the index.

  <xsl:key name="letter" match="indexterm" use="substring(primary,1,1)"/>

  <xsl:key name="letter" match="indexterm"
           use="translate(substring(primary,1,1),
                          'abcdefghijklmnopqrstuvwxyz',
                        'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
  <xsl:apply-templates select="//indexterm[count(.|
                                 key('letter',
                                   translate(substring(primary,1,1),
                                     'abcdefghijklmnopqrstuvwxyz',
                                     'ABCDEFGHIJKLMNOPQRSTUVWXYZ'))[1])
                                 = 1]"
                       mode="index-div">
    <xsl:sort select="translate(primary, 'abcdefghijklmnopqrstuvwxyz',
                                         'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
  </xsl:apply-templates>
  <xsl:key name="primary" match="indexterm" use="primary"/>

  <xsl:template match="indexterm" mode="index-div">
    <!-- Get the group key (ie. first letter of index terms in this group -->
    <xsl:variable name="key"
                  select="translate(substring(primary,1,1),
                                    'abcdefghijklmnopqrstuvwxyz',
                                    'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>

    <!-- Output label for current index group -->
    <xsl:value-of select="$key"/>

    <xsl:apply-templates select="key('letter', $key)
                                 [count(.|key('primary',primary)[1])=1]"
                         mode="index-primary">
      <xsl:sort select="translate(primary,
                                  'abcdefghijklmnopqrstuvwxyz',
                                  'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
    </xsl:apply-templates>
  </xsl:template>

  <xsl:key name="primary" match="indexterm" use="primary"/>

   <xsl:template match="indexterm" mode="index-primary">

    <!-- Find all occurences of index term -->
    <xsl:variable name="refs" select="key('primary', primary)"/>

    <!-- Output text of index term -->
    <xsl:value-of select="primary"/>

    <xsl:for-each select="$refs[not(secondary)]">
      <!-- Create page number reference (print) or link with back
           reference (HTML) to each occurrence of the index term -->
    </xsl:for-each>

    <xsl:if test="$refs/secondary">
       <!-- Process secondary level entries -->
    </xsl:if>
   </xsl:template>

Thanks in advance,
Kalpana

Current Thread