caucho
 Default Attributes with XPath if()


Since xsl:if can be cumbersome, Resin adds a special XPath function if(). Although if() is not part of the XPath standard, it's expected that the next version of the standard will add it.

if() is like the Java conditional expression test ? true : false pattern. In XPath, it looks like if(test,true,false). Using if() can simplify stylesheets dramatically, especially in combination with attribute value templates. The following is a simplification of the previous stylesheet using "example" as the default attribute value.

default.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="example">
  <table class="if(@class,@class,'example')">
    <tr>
      <td>
        <xsl:apply-templates/>
      </td>
    </tr>
  </table>
</xsl:template>

</xsl:stylesheet>

Notice that the 'example' value needs to be quoted, otherwise it would be interpreted as selecting an element value. The following XTP specifies a different class for the example. Often, though, it's a good idea to stick with meaningful tags like <example> and leave formatting questions like the CSS class to the stylesheet. In that case, you can use attributes to select different templates.

hello.xtp
<example class="simple-example">
This is an example.
</example>

<table class="simple-example">
<tr>
  <td>This is an example</td>
</tr>
</table>

Summary

  • if(expr,true_expr,false_expr) is a conditional expression.

Copyright © 1998-2002 Caucho Technology, Inc. All rights reserved.
Resin® is a registered trademark, and HardCoretm and Quercustm are trademarks of Caucho Technology, Inc.