Subject: Re: [xsl] Adding a class to HTML's class attribute From: "Abel Braaksma (online)" <abel.online@xxxxxxxxx> Date: Wed, 8 Aug 2007 20:05:53 +0200 (CEST) |
> Hello, > > I have a HTML which transformed with XSL. It contains tags like these > > 1. <li class="foo"></li> > 2. <li></li> > > I want to add a certain class to the attributes: > > 1. <li class="foo bar"></li> > 2. <li class="bar"></li> > > Anybody with a smart solution? The only (dump but simple) solution I > have in my mind is to use <xsl:choose> to handle the different cases. > No, xsl:choose is almost never a good solution. Here's one approach, which is usually the best if input and output look alike: the copy idiom: <xsl:template match="node() |@*"> <xsl:copy> <xsl:apply-templates select="node() | @*"> </xsl:copy> </xsl:template> <xsl:template match="li/@class"> <xsl:attribute name="class"> <xsl:value-of select="."> <xsl:text> bar</xsl:text> </xsl:attribute> </xsl:template> That will do what you want. Cheers, -- Abel Braaksma PS: whenever you are trying a solution and you find yourself doing 'traditional' style programming from you Perl/C++/PHP/VB/Java days (i.e.: imperative programming) with things like many xsl:if / xsl:choose / xsl:for-each to instruct your processor, you should try to turn the logic around, like in the example above (define matching templates and let the processor do the math for you instead of the other way around)
Current Thread |
---|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Adding a class to HTML's clas, Kai Weber | Thread | RE: [xsl] Adding a class to HTML's , Kai Weber |
RE: [xsl] Adding a class to HTML's , cknell | Date | RE: [xsl] Adding a class to HTML's , Kai Weber |
Month |