Re: [xsl] xhtml xslt?

Subject: Re: [xsl] xhtml xslt?
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Wed, 25 Aug 2004 21:52:16 +0100
Hi Nathan,

> but I am thinking that I could do something more generic like this
> instead:
>
> <!-- copy all nodes and attributes -->
> 	<xsl:template match="xhtml:node()|@*">
> 		<!--<xsl:message>Element <xsl:value-of
> select="local-name()"/></xsl:message>-->
> 		<xsl:copy>
> 			<xsl:apply-templates select="@*|xhtml:node()"/>
> 		</xsl:copy>
> 	</xsl:template>
>
> However, the above does a copy, which is not what I want, as an
> XHTML element may contain a custom element inside of it, so I really
> need to do an apply-templates instead.

The above isn't actually legal (you can't have "xhtml:node()"). What
you probably meant was:

<xsl:template match="xhtml:*">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()" />
  </xsl:copy>
</xsl:template>

The above does an <xsl:apply-templates> on the content of the XHTML
elements.

> Also, I believe the above will copy all attributes on all nodes
> right, when I only want to copy the attributes on xhtml: nodes.

My revision above only matches XHTML elements, so it only does what it
does with those elements. To copy XHTML elements and their attributes,
I'd usually use:

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

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/

Current Thread