Re: [xsl] match on attribute anywhere

Subject: Re: [xsl] match on attribute anywhere
From: "Christopher R. Maden" <crism@xxxxxxxxx>
Date: Wed, 13 Feb 2002 16:38:09 -0800
Hash: SHA1

At 02:19 13-02-2002, Andrew Welch wrote:
>In my xml, if an element has an attribute 'mark=1' then it should be
>highlighted.  I can achieve it by putting a test on each template:
>However, doing this for each template seems a bit overkill, I would like to
>specify a general template like this:
><xsl:template match="@mark">
>         <span style="color:#FF0000">
>                 <xsl:apply-templates select/>
>         </span>
>and apply it using:
><xsl:apply-templates select="@mark|node()"/>
>This currently doesnt work for me - is it the correct approach?

First, you can't do <xsl:apply-templates select/>; in XML, you must have a 
name and value for an attribute.  But even if you did <xsl:apply-templates 
select="."/>, you'd be applying templates to the value of the mark 
attribute, not to the content of the element that had the mark attribute.

The named template approaches were better, though I'm not sure they 
directly addressed your problem.  Try this:

<xsl:template name="test-mark">
     <xsl:when test="@mark">
       <span style="color:#FF0000">

<xsl:template match="whatever">
   <xsl:call-template name="test-mark"/>

- -- 
Christopher R. Maden, Principal Consultant, HMM Consulting Int'l, Inc.
DTDs/schemas - conversion - ebooks - publishing - Web - B2B - training
<URL: > <URL: >
PGP Fingerprint: BBA6 4085 DED0 E176 D6D4  5DFC AC52 F825 AFEC 58DA
Version: PGP Personal Privacy 6.5.8


 XSL-List info and archive:

Current Thread