XSL : template for attribute

Subject: XSL : template for attribute
From: "Chanukov Orit" <orit@xxxxxxxxxxxxxxx>
Date: Wed, 28 Apr 1999 17:57:17 +0200
Thank You very match for help .
I added it and it works now .
I work with IE 5.0 .
I have number of another problems with attributes  .
Could You please help me again ?

Different nodes of my XML have attribute "colr" .
According to value of this attribute I need to output text with different
color .

 If I write in XSL the following , it's works fine :

<xsl:template match="Field">
<p >
 <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:apply-templates />
</p>
</xsl:template>

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="Field">
<p >
<xsl:apply-templates select="@colr"/>
<xsl:apply-templates />
</p>
</xsl:template>

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

3. If I removed < p > and </p > from <Field> node , it doesn't work : it
outputs "STYLE=color:black" as text . Why ?
What is a solution if I don't want to use <p> and </p> ?

Thanks in advance ,
Any comments will be appreciated .

Orit Chanukov .








-----Original Message-----
From: Kay Michael <Michael.Kay@xxxxxxx>
Date: Tue, 27 Apr 1999 17:55:43 +0100

You have written a template to process this attribute but you haven't
invoked it. <xsl:apply-templates> processes the child character nodes and
child elements but not the attributes. To process the attributes, write
<xsl:apply-templates select="@*"/>

Alternatively write <xsl:if test=".[@crlf]"><br /></xsl:if> in the parent
template (exact syntax depends what product you are using, you should always
say).
Mike Kay

-----Original Message-----
From: Chanukov Orit [mailto:orit@xxxxxxxxxxxxxxx]
Sent: 27 April 1999 15:49
To: XSL-List@xxxxxxxxxxxxxxxx
Subject: XSL : template for attribute


Hello .

How should I write template for attribute ?

In my XML file I have , for example , the following line :

 <Field line="16" offset="1" colr="8" crlf="1" >Selection or command</Field>

crlf attribute should insert <&br> to the output .
Different nodes of XML  tree have this attribute ( not only Field ) .

in XSL file I wrote the following :

<xsl:template match="text()"><xsl:value-of /></xsl:template>

<xsl:template match="Field">
<xsl:apply-templates />
</xsl:template>

<xsl:template match="@crlf">
    <br></br>
 </xsl:template>

It doesn't work .
What wrong here ?
See attached XML and XSL files .

Thanks in advance ,
Orit .



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





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


Current Thread