Re: [xsl] how to recycle code to process the same element more than once

Subject: Re: [xsl] how to recycle code to process the same element more than once
From: David Carlisle <davidc@xxxxxxxxx>
Date: Fri, 13 Feb 2009 11:41:27 GMT
This is a grouping qn so always the syntax is a bit simpler in xslt 2,
but assuming that you are using xslt1, something like



<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
    <!--<xsl:output type="xml"/>-->


<xsl:output indent="yes" encoding="US-ASCII"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/">
 <martif type="TBX" xml:lang="en">
  <text>
   <body>
    <xsl:apply-templates select="dictionary/records/record">
    </xsl:apply-templates>
   </body>
  </text>
 </martif>
</xsl:template>

<!-- google for muenchian grouping-->
<xsl:key name="t" match="term" use="concat(../@num,'-',@lang)"/>

<xsl:template match="record">
 <termEntry id="{@num}">
  <xsl:for-each select="term[generate-id(.)=
 generate-id(key('t',concat(../@num,'-',@lang))[1])]">
   <langSet xml:lang="{@lang}">
    <xsl:apply-templates select="key('t',concat(../@num,'-',@lang))"/>
   </langSet>
  </xsl:for-each>
 </termEntry>
</xsl:template>




<xsl:template match="term">
  <term id=""><xsl:apply-templates/></term>
</xsl:template>

</xsl:stylesheet>








$ saxon lang.xml lang.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<martif type="TBX" xml:lang="en">
   <text>
      <body>
         <termEntry id="1">
            <langSet xml:lang="ca">
               <term id="">absenta</term>
            </langSet>
            <langSet xml:lang="es">
               <term id="">absenta</term>
               <term id="">ajenjo</term>
            </langSet>
            <langSet xml:lang="en">
               <term id="">absinth</term>
               <term id="">absinthe</term>
            </langSet>
         </termEntry>
         <termEntry id="2">
            <langSet xml:lang="ca">
               <term id="">acetificaci&#243;</term>
            </langSet>
            <langSet xml:lang="es">
               <term id="">acetificaci&#243;n</term>
            </langSet>
            <langSet xml:lang="en">
               <term id="">acetification</term>
            </langSet>
         </termEntry>
      </body>
   </text>
</martif>

________________________________________________________________________
The Numerical Algorithms Group Ltd is a company registered in England
and Wales with company number 1249803. The registered office is:
Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.

This e-mail has been scanned for all viruses by Star. The service is
powered by MessageLabs. 
________________________________________________________________________

Current Thread