Altova Mailing List Archives
>xsl-list Archive Home
>Thread Prev -
>Thread Next - RE: [xsl] default attribute values?
RE: [xsl] default attribute values?
Date: 8/2/2002 8:11:00 AM
>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. Wendell, that's a bit obscure (thus, I like it), but it probably makes sense where you're doing a lot of attribute manipulation. In particular, if you changed the name of a certain set of attributes on multiple different elements. The choose block certainly makes it more obvious what's going on and I'd guess it's likely is more efficient for the case where you're only flipping the name on a single attribute for a single element...? XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list