Subject: RE: 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/
|