[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] A better solution...


Subject: RE: [xsl] A better solution...
From: Jarno.Elovirta@xxxxxxxxx
Date: Thu, 25 Oct 2001 11:25:39 +0300

> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> 	<xsl:output method="html" omit-xml-declaration="yes" 
> indent="no"/>
> 
> 	<xsl:param name="S"/>
> 
> 	<xsl:template match="/Sections">
> 		<xsl:for-each select="//Section[@Title=$S][1]">
> 			<xsl:call-template name="SubS"/>
> 		</xsl:for-each>
> 	</xsl:template>
> 
> 	<xsl:template name="SubS" match="Section">
> 		<!- ... -->
> 	</xsl:template>
> 
> </xsl:stylesheet>
> 
> This applies the 2nd template to the first occurrence of node 
> Section with
> attribute Title equal to the parameter S.

I think you want

  (//Section[@Title=$S])[1]

> The XML looks like this (sections can be nested up to any level):
> 
> <Sections>
> 	<Section Title="1">
> 		<Section Title="2"/>
> 		<Section Title="4"/>
> 		<Section Title="8">
> 			<Section Title="9"/>
> 		</Section>
> 	</Section>
> 	<Section Title="3">
> 		<Section Title="2"/>
> 	</Section>
> 	...
> </Sections>
> 
> What I don't like is to have to use a for-each to select the node.
> Any ideas ?

Why not simply do

	<xsl:template match="/Sections">
		<xsl:apply-template select="(//Section[@Title=$S])[1]" />
	</xsl:template>

Jarno

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



Current Thread
Keywords
xml