Les espaces de noms en XML sont pratiques, cependant dans certain cas, on s'en passerait bien. Surtout si, dans un même document, plusieurs parties sont définies par des espaces de noms différents.
Prenons l'exemple suivant :
<?xml version='1.0' encoding='utf-8'?>
<truc1
xmlns="http://www.exemple.com/truc1/">
<test1>XXX</test1>
<truc2
xmlns="http://www.exemple.com/truc1/">
<test2>XXX</test2>
</truc2>
<truc3
xmlns="http://www.exemple.com/truc1/">
<test3>XXX</test3>
</truc3>
</truc1>
Maintenant si on souhaite obtenir ce document :
<?xml version='1.0' encoding='utf-8'?>
<truc1>
<test1>XXX</test1>
<truc2>
<test2>XXX</test2>
</truc2>
<truc3>
<test3>XXX</test3>
</truc3>
</truc1>
Il suffit d'appliquer la feuille xsl suivante. Celle-ci se chargera de supprimer les "namespaces".
<?xml version="1.0"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
omit-xml-declaration="yes"
method="xml"
indent="no"/>
<xsl:template match="*">
<xsl:element name="{name()}">
<xsl:apply-templates select="@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:if test="local-name() = name()">
<xsl:copy/>
</xsl:if>
</xsl:template>
<xsl:template match="text()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="comment()"/>
</xsl:stylesheet>
Aucun commentaire:
Enregistrer un commentaire