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

Subject: [xsl] Re: How to create index entry in xsl file?
From: "Kalpana Pathak" <pathak.kalpana@xxxxxxxxx>
Date: Tue, 23 Dec 2008 23:26:00 +0530
Hello Vasu,

I am not using docbook dtd. However, I am using DITA dtd. Will this help me?

Awaiting for your reply!

Thanks,
Kalpana

On 12/22/08, Kalpana Pathak <pathak.kalpana@xxxxxxxxx> wrote:
> 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