RE: XSL : template for attribute

Subject: RE: XSL : template for attribute
From: Kay Michael <Michael.Kay@xxxxxxx>
Date: Thu, 29 Apr 1999 10:52:41 +0100
> 
> 2. If I tried to write template for this attribute ,
> it doesn't work correctly - it each time goes  to the " 
> otherwise" case  .
> What wrong here ?
> > 
> <xsl:template match="@colr">
>  <xsl:attribute name="STYLE">color:
>    <xsl:choose>
>         <xsl:when test="@colr[.='2']">white</xsl:when >
>         <xsl:when test="@colr[.='0']">green</xsl:when >
>         <xsl:otherwise >black</xsl:otherwise >
>    </xsl:choose>
>    </xsl:attribute>
> </xsl:template>
> 
There's a lot of differences as to the exact form of the condition in
<xsl:when>. In the Dec 1998 standard it's a select-pattern (returning true
if any nodes are selected), but other options are suggested in editorial
notes. In Apr 99 it's a boolean-expression. In SAXON 4.2 it's a match
pattern (true if the current node matches).

Your test fails as a select-expression because it's asking to find an @colr
attribute of the @colr attribute, and attributes don't have attributes. It
would work in SAXON, I think. In the April 99 spec you should write:
test=".='2'"

(Incidentally, I can't see an easy way in the April 99 spec to test in a
boolean expression whether the current node matches a match-pattern. I would
have thought it would be useful to allow something like:

<xsl:if test="matches(CHAPTER[TITLE]//PARA)">

to test whether the node is a PARA with a CHAPTER ancestor that has a TITLE
child.
In SAXON I made the test a match pattern because a match pattern can refer
to a select pattern but not the other way round.);

Mike Kay


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


Current Thread