| 
 
Subject: RE: [xsl] Iterating recursivly on a node changing the element  names From: "Scott Trenda" <Scott.Trenda@xxxxxxxx> Date: Wed, 21 Nov 2007 08:25:32 -0600  | 
Alternately:
<xsl:element name="{local-name()}" namespace="yourNamespaceURI">
~ Scott
-----Original Message-----
From: Andrew Welch [mailto:andrew.j.welch@xxxxxxxxx]
Sent: Wednesday, November 21, 2007 4:18 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Iterating recursivly on a node changing the element
names
On 21/11/2007, ML mail <mlnospam@xxxxxxxxx> wrote:
> Dear list,
>
> I would like to modify the name of my elements of a
> certain node to
>  make it use a new namespace so for that I somehow
> need an iteration
>  process which goes through a specific node and adds a
> prefix to all of my
>  elements. Let's say I have the following:
>
> <start attr="myattr">
>     <two>
>         <three>3</three>
>         <four>4</four>
>     </two>
> </start>
>
> I need to make it look like this after processing:
>
> <nsprefix:start attr="myattr">
>     <nsprefix:two>
>         <nsprefix:three>3</nsprefix:three>
>         <nsprefix:four>4</nsprefix:four>
>     </nsprefix:two>
> </nsprefix:start>
>
>
> I started creating a template for that and defining
> all the nodes under
>  the start node but this sounds quite stupid because
> if there are many
>  different possibilites it makes a whole lot of checks
> to build. So I
>  was thinking it's much easier to just detect the
> start element and then
>  iterate through all of it's child elements (in my
> case: two, three four)
>  and add the prefix to these elements. Unfortunately I
> didn't manage to
>  do that. Can someone provide me help on how to
> acheive that ?
Use the standard identity template with a specific template to put
<start> and all of it's descendants into the namespace:
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="*[ancestor-or-self::start]">
        <xsl:element name="nsprefix:{local-name()}">
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>
...make sure "nsprefix" is mapped somewhere.
cheers
--
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.net/
| Current Thread | 
|---|
 
 
  | 
| <- Previous | Index | Next -> | 
|---|---|---|
| Re: [xsl] Iterating recursivly on a, David Carlisle | Thread | Re: [xsl] Iterating recursivly on a, Florent Georges | 
| Re: [xsl] Iterating recursivly on a, Andrew Welch | Date | Re: [xsl] Iterating recursivly on a, G. Ken Holman | 
| Month |