Fondamentalement, vous avez besoin d'une transformation XSL qui crée de nouveaux éléments avec des noms égaux, mais un espace de noms différent.
Tenir compte XML d'entrée suivante:
<?xml version="1.0" encoding="UTF-8"?>
<test xmlns="http://tempuri.org/ns_old">
<child attrib="value">text</child>
</test>
Maintenant, vous avez besoin d'un modèle qui dit « structure de copie et nom de tout ce que vous voyez, mais déclarer un nouvel espace de noms pendant que vous y êtes »:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:old="http://tempuri.org/ns_old"
>
<xsl:output method="xml" version="1.0"
encoding="UTF-8" indent="yes" omit-xml-declaration="no"
/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="old:*">
<xsl:element name="{local-name()}" namespace="http://tempuri.org/ns_new">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Lorsque vous exécutez le code XML ci-dessus à travers elle, ce produit:
<?xml version="1.0" encoding="UTF-8"?>
<test xmlns="http://tempuri.org/ns_new">
<child attrib="value">text</child>
</test>
Toutes vos http://tempuri.org/ns_old
éléments ont effectivement changé leur espace de noms. Lorsque votre XML d'entrée a plus d'un espace de noms en même temps, le XSL doit très probablement être étendu un peu.