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

Subject: Re: [xsl] How to create index entry in xsl file?
From: "Vasu Chakkera" <vasucv@xxxxxxxxx>
Date: Mon, 22 Dec 2008 14:20:20 +0000
Please take a look at the stylesheets in the docbook sourceforge.
http://docbook.sourceforge.net/release/xsl/current/doc/

(that is if you are using the docbook dtd)

Most of these have a ready made solution..

Vasu


On 22/12/2008, 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
>
>


-- 
Vasu Chakkera
Numerical Algorithms Group Ltd.
Oxford
www.vasucv.com

Current Thread