[XSLT] modification d'un préfixe namespace XML
J'ai fait une application qui, entre autres, importe des fichiers XML dans une base Access qu'elle crée elle même. Pour que cela fonctionne (merci Access....), l'attribut doit obligatoirement valoir
Code:
http://www.w3.org/2000/10/XMLSchema-instance
Jusque là, tout se tient. Par la suite les choses se compliquent : une fois mon importation de ces fichiers terminée, je voudrais mettre à jour la valeur de l'attribut wmlns : xsi, pour qu'il prenne la valeur de la derniere norme, c'est-à-dire
Code:
http://www.w3.org/2001/XMLSchema-instance
J'ai donc fait un fichier XSLT qui remplace la valeur 2000/10 par la valeur 2001. Le fichier XSLT est le suivant
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| <?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="ISO-8859-15" indent="yes"/>
<xsl:template match="node()" priority="1">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- règles pour les contenus de balise : on recopie -->
<xsl:template match="text()" priority="1">
<xsl:value-of select="."/>
</xsl:template>
<!-- regle pour les balises : on recopie -->
<xsl:template match="@*" priority="1">
<xsl:attribute name="{name()}">
<xsl:call-template name="Replace">
<xsl:with-param name="chaine" select="."></xsl:with-param>
<xsl:with-param name="chaineCherche" select="'2000/10'"></xsl:with-param>
<xsl:with-param name="chaineRempl" select="'2001'"></xsl:with-param>
</xsl:call-template>
</xsl:attribute>
<!--<xsl:attribute name="{name()}"><xsl:value-of select="."/></xsl:attribute>-->
</xsl:template>
<xsl:template name="Replace">
<!--remplace une chaine par une autre-->
<xsl:param name="chaine"/>
<xsl:param name="chaineCherche"/>
<xsl:param name="chaineRempl"/>
<xsl:choose>
<xsl:when test="contains($chaine,$chaineCherche) ">
<xsl:call-template name="Replace">
<xsl:with-param name="chaine" select="concat(substring-before($chaine,$chaineCherche),$chaineRempl,substring-after($chaine,$chaineCherche))"/>
<xsl:with-param name="chaineCherche" select="$chaineCherche"/>
<xsl:with-param name="chaineRempl" select="$chaineRempl"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$chaine"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:transform> |
Problème, l'attribut que je veux modifier à l'air d'être le seul à ne pouvoir subir de modification....
En effet, à partir du fichier
Code:
1 2 3 4 5 6
| <?xml version="1.0" encoding="ISO-8859-15"?>
<ElementsRecuperes
xsi:noNamespaceSchemaLocation="2000/10070503-103732-export.xsd"
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
...
... |
j'aboutit au fichier
Code:
1 2 3 4 5 6
| <?xml version="1.0" encoding="ISO-8859-15"?>
<ElementsRecuperes
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="2001070503-103732-export.xsd">
...
... |