Re: [xsl] Rename Some Node and attribute

Subject: Re: [xsl] Rename Some Node and attribute
From: "Mukul Gandhi" <gandhi.mukul@xxxxxxxxx>
Date: Mon, 16 Oct 2006 21:29:31 +0530
Please try this stylesheet:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

<xsl:output method="xml" indent="yes" />

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

<xsl:template match="*[local-name() = 'RICHIESTA_PRESTAZIONI_EROGABILI']">
 <ser:ELENCO_PRESTAZIONI xmlns:ser="http://services.standardcup.esel.it";>
   <xsl:copy-of select="@*[not(local-name() = 'idCup')]" />
   <xsl:attribute name="idCUP"><xsl:value-of select="@idCup"/></xsl:attribute>
   <ser:PRESTAZIONE />
   <xsl:apply-templates />
 </ser:ELENCO_PRESTAZIONI>
</xsl:template>

</xsl:stylesheet>


On 10/16/06, Davide Antoni <davide.antoni@xxxxxxxxxxx> wrote:
Thanks.
But how to rename the node : RICHIESTA_PRESTAZIONI_EROGABILI into
:ELENCO_PRESTAZIONI
inside this magic stuff?
My question is :
rename attribute idCup in idCUP
and rename nome RICHIESTA_PRESTAZIONI_EROGABILI to ELENCO_PRESTAZIONI

this is my input:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:ser="http://services.standardcup.esel.it";>
  <soapenv:Body>
     <ser:RICHIESTA_PRESTAZIONI_EROGABILI DataOra="10102005" idCup="1"
idOperatore="1"/>
  </soapenv:Body>
</soapenv:Envelope>

and i want this output:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:ser="http://regione.campania.it/schemas/cup";>
  <soapenv:Body>
     <ser:ELENCO_PRESTAZIONI DataOra="?" idCUP="?" idOperatore="?">
        <ser:PRESTAZIONE/>
     </ser:ELENCO_PRESTAZIONI>
  </soapenv:Body>
</soapenv:Envelope>

Thanks.



Abel Braaksma ha scritto:
> Davide Antoni wrote:
>> Hi to all
>>
>>    <xsl:template match="*">
>>            <xsl:copy>
>>            <xsl:copy-of select="@*[name()!='idCup']"/>
>>            <xsl:if test="@idCup">
>>                    <xsl:attribute name="idCUP">
>>                        <xsl:value-of select="@idCup">
>>                        </xsl:value-of>
>>                    </xsl:attribute>
>>            </xsl:if>
>>            <xsl:apply-templates/>
>>        </xsl:copy>
>>    </xsl:template>
>
> Why all the complex xsl:copy and xsl:copy-of intermingled with xsl:if?
> Make it yourself easier by applying the (in)famous copy-idiom. Try
> this as a complete replacement of your code and the magic of XSLT will
> do the work:
>
> <xsl:template match="node( ) | @*">
>  <xsl:copy>
>    <xsl:apply-templates select="@* | node( )"/>
>  </xsl:copy>
> </xsl:template>
>
> <xsl:template match="@idCup">
>  <xsl:attribute name="idCUP">
>    <xsl:value-of select="."/>
>  </xsl:attribute>
> </xsl:template>
>
> Hope this helps,
>
> Cheers
> -- Abel Braaksma
>   http://www.nuntia.com


--
Regards,
Mukul Gandhi

Current Thread