RE: [xsl] how to rename attributes and restrict selection?

Subject: RE: [xsl] how to rename attributes and restrict selection?
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 31 May 2005 23:03:42 +0100
> Apart from using xslt to transform the structure of my original XML 
> document, i want to:
> 1) only transform those elements that are "part of a list" (i 
> need to be 
> able to specify/restrict the selection to the elements "B" 
> with attributes 
> "C" and "D" in the example below).
> 2) i want to rename the attribute of these selected elements 
> (so attribute 
> "C" will be renamed into "renamed_C", etc.) 
> 
> Is this possible?? 


The general approach is to write an identity template rule that copies
elements across unchanged:

<xsl:template match="*">
  <xsl:copy>
  <xsl:copy-of select="@*"/>
  <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

and then add an overriding rule for elements that you want to modify, e.g.
to rename attribute C of element B do

<xsl:template match="B">
  <xsl:copy>
  <xsl:copy-of select="@* except C"/>  <!-- this is XPath 2.0 syntax -->
  <xsl:attribute name="renamed_C"><xsl:value-of
select="@C"/></xsl:attribute>
  <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

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

Current Thread