xsl-list
[Top] [All Lists]

Re: Avoiding dummy xsl:if with apply-templates

2005-02-12 21:24:00
On Sun, 13 Feb 2005 03:53:06 +0000, Frans Englich
<frans(_dot_)englich(_at_)telia(_dot_)com> wrote:

Hello all,

I find myself struggling with a construct I often need: conditionally, "else",
do something radically different depending on input.

For example:

          <xsl:variable name="el" select="elements" />
           <xsl:if test="count($el)">
               <ul>
                   <xsl:apply-templates select="$el" />
               </ul>
           </xsl:if>

Here, the if statement and variable declaration exists solely to avoid an
empty ul element; the special condition which occurs when the select misses.

Producing xhtml tables is a similar case. I find these common situations in
XSLT programming.

These examples can be solved with usual conditional tests, as above, but I
want to push the conditionalis upon the engine and write with templates; the
clean, XSLT-like way. AFAICT, this made-up syntax would solve the problem:

<xsl:apply-templates select="elements">
       <ul>
               <xsl:apply/>
       </ul>
</xsl:apply-templates>

Hence, when the select clause fails, the apply-templates body is not entered,
and the conditionalis is not needed to be manually written and comes
naturally, even.

What is the proper way of doing what I want?


Something like this:

   <xsl:apply-templates select="elements[1]" mode="list">
     <xsl:with-param name="pElements" select="elements"/>
   </xsl:apply-templates>

Then the template to wrap the results in a "ul" is the following:

  <xsl:template match="element" mode="list">
     <xsl:param name="pElements"/>
     <ul>
         <xsl:apply-templates select="$pElements" mode="single"/>
    </ul>
  </xsl:template>



Cheers,
Dimitre Novatchev.

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