RE: [xsl] default attribute values?

Subject: RE: [xsl] default attribute values?
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Fri, 02 Aug 2002 11:39:28 -0400
(Michael McGlothlin)

Sorry to pick up a thread so old, I feel like the kid running through the snow after the dog sled has left....

At 04:19 PM 7/12/2002, Peter wrote:
> Seemed to work well except in a couple cases where I rename the attribute.
> Any way to change the name when I copy?

I'm afraid not, in that case you'll have to use an xsl:if or xsl:choose
block:

       <input>
         <xsl:attribute name="name">
           <xsl:choose>
             <xsl:when test="@gunk"><xsl:value-of
select="@gunk"/></xsl:when>
             <xsl:otherwise>default</xsl:default>
           </xsl:choose>
         </xsl:attribute>
         <xsl:if test="@foo">
            <xsl:attribute name="bar"><xsl:value-of
select="@foo"/></xsl:attribute>
         </xsl:if>
      </input>

This could actually be done a bit more elegantly, following the pattern Peter described earlier, as so:


<input name="default">
  <xsl:apply-templates select="@gunk"/>
</input>

<xsl:template match="@gunk">
  <xsl:attribute name="name">
    <xsl:value-of select="."/>
  </xsl:attribute>
</xsl:template>

In fact if you used templates instead of the copy-of, you could generalize this for all the attributes:

<input name="default" name2="default2">
  <xsl:apply-templates select="@*"/>
</input>

<xsl:template match="node/@*">
  <xsl:copy-of select="."/>
</xsl:template>

<xsl:template match="@gunk" priority="1">
  <xsl:attribute name="name">
    <xsl:value-of select="."/>
  </xsl:attribute>
</xsl:template>

Note that on the template for the attribute whose name is changing (@gunk to @name), an explicit priority is necessary to make sure that template fires instead of the template that copies.

Cheers,
Wendell


====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx Mulberry Technologies, Inc. http://www.mulberrytech.com 17 West Jefferson Street Direct Phone: 301/315-9635 Suite 207 Phone: 301/315-9631 Rockville, MD 20850 Fax: 301/315-8285 ---------------------------------------------------------------------- Mulberry Technologies: A Consultancy Specializing in SGML and XML ======================================================================


XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list



Current Thread