xsl-list
[Top] [All Lists]

RE: [xsl] Find a specific element or fall back to element 1

2007-01-15 16:06:11
Try

select="(image[1] | image[(_at_)default='true'])[last()]"

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

-----Original Message-----
From: John Horner [mailto:Horner(_dot_)John(_at_)abc(_dot_)net(_dot_)au] 
Sent: 15 January 2007 22:50
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] 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 
==============================================================
================

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--