Comment remplacer le préfixe d'espace de noms d'éléments et d'attributs à l'aide de xslt

J'ai une source xml comme suit:

<SampleRequest xmlns="http://sample.com/s"
       xmlns:s1="http://sample.com/s1"
       xmlns:s2="http://sample.com/s2"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://sample.com/s schema.xsd">
<data>
<s1:customer s1:firstName="Jim" s1:lastName="Ellison"/>
<s2:address>
    123 test street
</s2:address>
</data>
</SampleRequest>

J'ai besoin de le transformer à la suite de

<SampleRequest xmlns="http://sample.com/t"
       xmlns:t1="http://sample.com/t1"
       xmlns:t2="http://sample.com/t2"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://sample.com/t targetSchema.xsd">
<data>
<t1:customer t1:firstName="Jim" t1:lastName="Ellison"/>
<t2:address>
    123 test street
</t2:address>
</data>
</SampleRequest>

les deux xmls schéma identique mais différent de l'espace de noms.

J'ai essayé d'utiliser la suite xslt

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns="http://sample.com/s"
            xmlns:s1="http://sample.com/s1"
            xmlns:s2="http://sample.com/s2"
            xmlns:t1="http://sample.com/t1"
            xmlns:t2="http://sample.com/t2"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="s1 s2">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
    <SampleRequest xmlns="http://sample.com/t"
       xmlns:t1="http://sample.com/t1"
       xmlns:t2="http://sample.com/t2"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <xsl:attribute name="xsi:schemaLocation" namespace="http://www.w3.org/2001/XMLSchema-instance">
            http://sample.com/t targetSchema.xsd
        </xsl:attribute>
        <xsl:copy>
             <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </SampleRequest>
</xsl:template>
<xsl:template match="s1:*"> 
    <xsl:element name="t1:{local-name()}" namespace="http://sample.com/t1">      
        <xsl:apply-templates select="* | node()"/>
    </xsl:element>
</xsl:template>

<xsl:template match="s2:*"> 
    <xsl:element name="t2:{local-name()}" namespace="http://sample.com/t2">
        <xsl:apply-templates select="* | node()"/>
    </xsl:element>
</xsl:template>
</xsl:stylesheet>

Et j'obtiens le résultat suivant

<?xml version="1.0" encoding="UTF-8"?><SampleRequest xmlns="http://sample.com/t"   xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:t2="http://sample.com/t2" xmlns:t1="http://sample.com/t1" xsi:schemaLocation=" http://sample.com/t targetSchema.xsd">
<t1:customer/>
<t2:address>
    123 test street
</t2:address>
</SampleRequest>

Il semble que tous les attributs sont manquantes.
Je suis très nouveau à XSLT, chaque petit aide appréciée

OriginalL'auteur user1329164 | 2012-04-12