xsl-list
[Top] [All Lists]

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

2007-01-15 16:08:12
John Horner wrote:
<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?

There are many ways that lead to Rome. It can be done very short in XSLT 2, but I guess you are using XSLT 1. Here's one way to tackle it, using only template matching, which will output the number "1" is there is no image with @default, and will print the position of the one with @default when there is one.

   <xsl:template match="/">
pos2: <xsl:apply-templates select="$gallery-xml-file/gallery/image" />
   </xsl:template>
<xsl:template match="image[(_at_)default] | image[not(../image/@default)][1]">
       <xsl:value-of select="position()" />
   </xsl:template>
<xsl:template match="image" />


Cheers,
-- Abel Braaksma
  http://www.nuntia.nl

--~------------------------------------------------------------------
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>
--~--