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
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
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
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
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
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">
...
... |
Partager