Subject: RE: Find a specific element or fall back to element 1
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 15 Jan 2007 23:05:46 -0000
|
Try
select="(image[1] | image[@default='true'])[last()]"
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: John Horner [mailto:Horner.John@xxxxxxxxxx]
> Sent: 15 January 2007 22:50
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Find a specific element or fall back to element 1
>
> I have a gallery.xml file containing a number of images:
>
> <gallery>
> <image>
> <filename>1.jpg</filename>
> </image>
> <image>
> <filename>2.jpg</filename>
> </image>
> <!-- etc -->
> <image default="true">
> <!-- optional attribute applies to this element -->
> <filename>10.jpg</filename>
> </image>
> </gallery>
>
> and my xslt has to do the following thing -- look for an
> image marked with a "default" attribute, and if it's not
> found, use the first image instead. So I'm looking for the
> position number of the marked element, and if I can't find
> it, using 1:
>
> <xsl:variable name="gallery-xml-file"
> select="document($gallery-xml-path)"/>
> <xsl:variable name="test-position">
> <xsl:for-each select="$gallery-xml-file//image">
> <xsl:if test="@default='true'">
> <xsl:value-of select="position()"/>
> </xsl:if>
> </xsl:for-each>
> </xsl:variable>
> <xsl:variable name="display-position">
> <xsl:choose>
> <xsl:when test="$test-position = ''">1</xsl:when>
> <xsl:otherwise>
> <xsl:value-of select="$test-position"/>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:variable>
>
> This seems a bit long and wasteful to me. Is there a better way?
>
> ==============================================================
> ================
> The information contained in this email and any attachment is
> confidential and
> may contain legally privileged or copyright material. It is
> intended only for
> the use of the addressee(s). If you are not the intended
> recipient of this email, you are not permitted to
> disseminate, distribute or copy this email or any
> attachments. If you have received this message in error,
> please notify the sender immediately and delete this email
> from your system. The ABC does not
> represent or warrant that this transmission is secure or
> virus free. Before
> opening any attachment you should check for viruses. The
> ABC's liability is limited to resupplying any email and
> attachments
> ==============================================================
> ================
|