This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: xsl:copy
- From: "Agnes Kielen" <a dot kielen at home dot nl>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Sat, 6 Jul 2002 15:34:11 +0200
- Subject: Re: [xsl] xsl:copy
- References: <20020706122158.83484.qmail@web9403.mail.yahoo.com>
- Reply-to: xsl-list at lists dot mulberrytech dot com
Hi,
Cenk wrote:
> I have a XSL file as follows:
>
> <?xml version="1.0"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> <xsl:template match="/ | @* | node()">
> <xsl:copy>
> <xsl:apply-templates select="@* | node()"/>
> </xsl:copy>
> </xsl:template>
> </xsl:stylesheet>
>I try to copy a XML file's tags which satisifies my
> language filtering. For example I will only copy following XML's
> lang='en' and no language defined tags:
>
> <page>
> <title lang="tr">Hoºgeldiniz</title>
> <title lang="en">Wellcome</title>
> <description>
> assafs aszdfsd
> </description>
> </page>
Try this:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*">
<xsl:copy>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="node()[@lang='en'] | node()[not(@lang)]"
mode="cp"/>
</xsl:copy>
</xsl:template>
<xsl:template match="node()" mode="cp">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
I split the <xsl:template match="/ | @* | node()"> in two seperate
templates. I removed match / because that is not really necessary. By the
"match=node()" the copy is only done when the @lang is 'en' or does not
exist. In that case the template with mode='cp' is called.
Hope that helps,
Agnes
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list