RE: [xsl] convert nested elements, ID's and classes to CSS declaration

Subject: RE: [xsl] convert nested elements, ID's and classes to CSS declaration
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 21 Mar 2007 17:24:46 -0000
> I searched for this all over and couldn't find a solution.  I 
> want to take the following XML:
> 
> <root>
> 	<file>
> 		<element/>
> 	</file>
> 	<file id="a">
> 		<element id="a"/>
> 	</file>
> 	<file class="b">
> 		<element class="b"/>
> 	</file>
> 	<file id="c" class="d" not="1" this="2">
> 		<element id="c" class="d" not="1" this="2"/>
> 	</file>
> </root>
> 
> 
> #### and output something this ####
> 
> 
> root
> root file
> root file element
> root file #a
> root file #a element #a
> root file .b
> root file .b element .b
> root file #c .d
> root file #c .d element #c .d
> 

XSLT 1.0 or 2.0? Here's a 2.0 solution, untested:

<xsl:template match="*">
 <xsl:apply-templates select="ancestor-or-self::*/(.|@class|@id)"
mode="token"/>
 <xsl:text>&#xa;</xsl:text>
</xsl:template>

<xsl:template match="*" mode="token">
  <xsl:value-of select="concat(name(), ' ')"/>
</xsl:template>

<xsl:template match="@class" mode="token">
  <xsl:value-of select="concat('.', ., ' ')"/>
</xsl:template>

<xsl:template match="@id" mode="token">
  <xsl:value-of select="concat('#', ., ' ')"/>
</xsl:template>

Michael Kay
http://www.saxonica.com/


> 
> #### ignoring any attributes that are not "id" or "class" and 
> containing all ancestor elements and id's and classes no 
> matter what the element name is or how many levels deep.  I'd 
> like to use this for auto generating CSS declarations from 
> XHTML snipits, I can deal with removing redundant rows 
> manually.  Below is the closest I've gotten which only strips 
> the XML to the elements and attributes I'm interested in, but 
> doesn't format it or list ancestor elements, id's and classes 
> (I'm a beginner at XSLT) thanks! ####
> 
> 
> <xsl:template match="node()|@id|@class"> <xsl:copy> 
> <xsl:apply-templates select="node()|@id|@class"/> </xsl:copy> 
> </xsl:template>
> 
> 
> 
> 
> 
>  
> ______________________________________________________________
> ______________________
> We won't tell. Get more on shows you hate to love (and love 
> to hate): Yahoo! TV's Guilty Pleasures list.
> http://tv.yahoo.com/collections/265 

Current Thread