This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: A better solution...
- To: xsl-list at lists dot mulberrytech dot com
- Subject: RE: [xsl] A better solution...
- From: Jarno dot Elovirta at nokia dot com
- Date: Thu, 25 Oct 2001 11:25:39 +0300
- Reply-To: xsl-list at lists dot mulberrytech dot com
> <?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