Re: [xsl] Glossary Help

Subject: Re: [xsl] Glossary Help
From: "Mukul Gandhi" <gandhi.mukul@xxxxxxxxx>
Date: Sat, 29 Jul 2006 14:09:11 +0530
Please try the following stylesheet:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

<xsl:output method="xml" indent="yes"/>

<xsl:template match="/division">
 <division>
   <xsl:copy-of select="@*" />
   <xsl:for-each select="topic">
     <topic>
       <xsl:copy-of select="@*" />
       <xsl:copy-of select="title" />
       <xsl:apply-templates select="body" />
     </topic>
   </xsl:for-each>
 </division>
</xsl:template>

<xsl:template match="body">
 <glossarylist>
   <xsl:apply-templates select="p/i/b[not(../../text())]" />
   <xsl:apply-templates select="p/i/b[../../text()]" />
   <xsl:apply-templates select="p/b[not(../../text())]" />
   <xsl:apply-templates select="p/b[../../text()]" />
 </glossarylist>
</xsl:template>

<xsl:template match="p/i/b[not(../../text())]">
 <glossarydiv>
   <xsl:value-of select="." />
 </glossarydiv>
</xsl:template>

<xsl:template match="p/i/b[../../text()]">
 <glossaryterm>
   <xsl:value-of select="." />
 </glossaryterm>
 <glossarydef>
   <xsl:value-of select="../../text()" />
 </glossarydef>
</xsl:template>

<xsl:template match="p/b[not(../text())]">
 <glossarydiv>
   <xsl:value-of select="." />
 </glossarydiv>
</xsl:template>

<xsl:template match="p/b[../text()]">
 <glossaryterm>
   <xsl:value-of select="." />
 </glossaryterm>
 <glossarydef>
   <xsl:value-of select="../text()" />
 </glossarydef>
</xsl:template>

</xsl:stylesheet>

This when applied to following XML:

<?xml version="1.0" ?>
<division type="appendix">
 <topic id="cfmrk">
   <title>Glossary</title>
   <body>
     <p>The terms in this glossary cover topics
related to this manual. Alternate naming is included for reference.</p>
     <p><i>  <b>Abbreviations</b>    </i></p>
     <p><i>  <b>AC:</b></i>  alternating current</p>
     <p><i>  <b>AGP:</b></i>  accelerated graphics port</p>
     <p><i>  <b>ANSI: </b></i> American National
Standards Institute</p>
     <p><i><b>APM:</b></i>  advanced power manager</p>
   </body>
 </topic>
 <topic id="Blank">
   <title>A</title>
   <body>
     <p><b>AccuPoint: </b> A pointing device integrated into the TOSHIBA
computer keyboard.</p>
     <p><b>adaptor:  </b>A device that provides an interface between two
dissimilar electronic devices. For example, the AC adaptor modifies the
power from a wall outlet for use by the computer. This term also refers to
the add-in circuit cards that control external devices, such as video
monitors and magnetic tape devices. </p>
     <p><b>allocate: </b> To assign a space or function for a
specific task.</p>
     <p><b>alphanumeric:</b>  Keyboard characters including letters,
numbers and
other symbols, such as punctuation marks or mathematical symbols.</p>
   </body>
 </topic>
</division>

Produced output:

<?xml version="1.0" encoding="UTF-8"?>
<division type="appendix">
  <topic id="cfmrk">
     <title>Glossary</title>
     <glossarylist>
        <glossarydiv>Abbreviations</glossarydiv>
        <glossaryterm>AC:</glossaryterm>
        <glossarydef>  alternating current</glossarydef>
        <glossaryterm>AGP:</glossaryterm>
        <glossarydef>  accelerated graphics port</glossarydef>
        <glossaryterm>ANSI: </glossaryterm>
        <glossarydef> American National
Standards Institute</glossarydef>
        <glossaryterm>APM:</glossaryterm>
        <glossarydef>  advanced power manager</glossarydef>
     </glossarylist>
  </topic>
  <topic id="Blank">
     <title>A</title>
     <glossarylist>
        <glossaryterm>AccuPoint: </glossaryterm>
        <glossarydef> A pointing device integrated into the TOSHIBA
computer keyboard.</glossarydef>
        <glossaryterm>adaptor:  </glossaryterm>
        <glossarydef>A device that provides an interface between two
dissimilar electronic devices. For example, the AC adaptor modifies the
power from a wall outlet for use by the computer. This term also refers to
the add-in circuit cards that control external devices, such as video
monitors and magnetic tape devices. </glossarydef>
        <glossaryterm>allocate: </glossaryterm>
        <glossarydef> To assign a space or function for a specific task.</gloss
arydef>
        <glossaryterm>alphanumeric:</glossaryterm>
        <glossarydef>  Keyboard characters including letters, numbers and
other symbols, such as punctuation marks or mathematical symbols.</glossarydef>
     </glossarylist>
  </topic>
</division>

Regards,
Mukul

http://gandhimukul.tripod.com

On 7/29/06, Shailesh Shinde <shailesh@xxxxxxxxxxxx> wrote:
Hi All,

I have an input xml file which looks like below, Here I have to do apply
glossary elements instead of <p><i><b> something like outputxml.

Inputxml:

<division type="appendix">
               <topic id="cfmrk">
                       <title>Glossary</title>
                       <body>
                               <p>The terms in this glossary cover topics
related to this manual. Alternate naming is included for reference.</p>
                               <p><i>  <b>Abbreviations</b>    </i></p>
                               <p><i>  <b>AC:</b></i>  alternating
current</p>
                               <p><i>  <b>AGP:</b></i>  accelerated
graphics port</p>
                               <p><i>  <b>ANSI: </b></i> American National
Standards Institute</p><p><i><b>APM:</b></i>  advanced power manager</p>
                       </body>
               </topic>

<topic id="Blank">
<title>A</title>
<body><p><b>AccuPoint: </b> A pointing device integrated into the TOSHIBA
computer keyboard.</p>
<p><b>adaptor:  </b>A device that provides an interface between two
dissimilar electronic devices. For example, the AC adaptor modifies the
power from a wall outlet for use by the computer. This term also refers to
the add-in circuit cards that control external devices, such as video
monitors and magnetic tape devices. </p>
<p><b>allocate: </b> To assign a space or function for a specific task.</p>
<p><b>alphanumeric:</b>  Keyboard characters including letters, numbers and
other symbols, such as punctuation marks or mathematical symbols.</p>
</body></topic>

And so on for other topics which contains title alphabetically.........

Outputxml:

<division type="appendix">
               <topic id="cfmrk">
                       <title>Glossary</title>

<glossarylist>
<glossarydiv> Abbreviations </ glossarydiv >
<glossaryterm> AC: </glossaryterm>
<glossarydef> alternating current </glossarydef>
</glossarylist>

Same for other topic titles "A", "B".......

Can anyone provide any examples or references for the same.

Current Thread