RE: [xsl] Repeating Code

Subject: RE: [xsl] Repeating Code
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Sat, 8 Oct 2005 09:55:29 +0100
We need to know a bit more. Let's assume somenode1 and somenode2 are simple
names (rather than more complex path expressions) so that all the nodes are
children of some parent, say P; but you don't necessarily want them output
in document order. Then in XSLT 1.0 you can do:

<xsl:apply-templates select="somenode1"/>
<xsl:apply-templates select="somenode2"/>

<xsl:template match="P/*">
   <COL>
       <DATA>
          <xsl:value-of select="." />
      </DATA>
   </COL>
</xsl:template>

In 2.0 you can change the call to

 <xsl:apply-templates select="somenode1, somenode2"/>

In 2.0 you can also do it with a for-each loop:

<xsl:for-each select="somenode1, somenode2">
   <COL>
       <DATA>
          <xsl:value-of select="." />
      </DATA>
   </COL>
</xsl:for-each>

but this is only possible in 1.0 if you want the output in document order
(you can use "|" in place of ",", or do select="*" to process all the
children).

Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: Nicholas Orr [mailto:nick@xxxxxxxxxxx] 
> Sent: 08 October 2005 06:39
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Repeating Code
> 
> Can anyone tell me if it  is possible to use a for-each loop 
> (or even  
> some other sort of loop) to repeat code for a certain set of xsl  
> outputs?  For example, currently my xsl contains  :
> 
>   <COL>
>       <DATA>
>           <xsl:value-of select="somenode1" />
>      </DATA>
> </COL>
>   <COL>
>       <DATA>
>          <xsl:value-of select="somenode2" />
>      </DATA>
>   </COL>
> 
> repeating for about 30 references, and the only change is in the  
> select line.  It works fine, but I'm wondering if there isn't a way  
> to make it neater.  So I can have a list of <xsl:value-of select >  
> lines and then only have the COL and DATA parts once in the XSL file.
> 
> Thanks,
> Nick

Current Thread