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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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">
...
...