Subject: Re: The identity transform and all <a> links: xslt 1.0 - nearly there!!
From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx>
Date: Thu, 24 Jan 2008 16:12:03 +0000
|
On 24/01/2008, Marroc <marrocdanderfluff@xxxxxxxxxxx> wrote:
> I now present the completed working transform for the benefit of future list
> users. This transform uses the identity transform to transfer everything
> from XHTML to XHTML, replete with doctype and namespace declarations, while
> converting the links to a new format. Notice particularly how the default
> namespace is set in the third line of the stylesheet element:
You don't actually need to do that... see below.
> <?xml version="1.0"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
> xmlns:xhtml="http://www.w3.org/1999/xhtml"
>
> xmlns="http://www.w3.org/1999/xhtml"
>
> exclude-result-prefixes="xhtml">
>
> <xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
>
> doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
> indent="yes" encoding="UTF-8" method="xml"/>
>
>
> <xsl:template match="node()">
> <xsl:copy>
> <xsl:apply-templates select="@*|node()"/>
> </xsl:copy>
> </xsl:template>
>
> <xsl:template match="@*">
> <xsl:copy/>
> </xsl:template>
>
> <xsl:template match="xhtml:a">
> <xsl:element name="a">
> <xsl:attribute
> name="href">javascript:include('<xsl:value-of
> select="@href"/>?i=1','BODY');</xsl:attribute>
> </xsl:element>
> </xsl:template>
> </xsl:stylesheet>
One problem with this is that you aren't copying across any existing
attributes on the xhtml:a element (such as @class), so you might be
better off restricting the match to just the href attribute:
<xsl:template match="xhtml:a/@href">
<xsl:attribute name="href">
<xsl:text>javascript:include('</xsl:text>
<xsl:value-of select="."/>
<xsl:text>?i=1','BODY');</xsl:text>
</xsl:attribute>
</xsl:template>
Doing that also removes the need to set the default namespace, as
you're not creating any new elements, just copying them across.
cheers
--
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.net/
|