Salut à tous,

Je bloque sur une division entre 2 noeuds de même niveau (v1 / v2), je dois placer le résultat dans un noeud également au même niveau (resultat).

Voici mon xml de base simplifié :

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
 
 
<yyy>
      <zzz>
	    <resultat></resultat>
	    <v1>9</v1>
            <v2>3</v2>
 
     </zzz>
      <zzz>
	        <resultat></resultat>
	        <v1>10</v1>
                <v2>2</v2>
     </zzz>
 
</yyy>
mon xsl entier :

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
 
<?xml version="1.0" encoding="iso-8859-1"?>
 
<xsl:stylesheet version="2.0" 
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
 
 
 
	<xsl:output method="xml" indent="yes"/>
 
 
	<!-- on reprend la structure de l'xml -->
	<xsl:template match="@* | node()" priority="1">
		<xsl:copy>
			<xsl:apply-templates select="@* | node()"/>
		</xsl:copy>
	</xsl:template>
 
		<!-- on remplace le noeud résultat par le calcul entre v1 et v2 -->
	<xsl:template match="zzz" priority="2">
		<xsl:variable name="division" select="v1 div v2" />
			<xsl:element name="resultat">
			<xsl:value-of select="$division"/>
	</xsl:element>
	</xsl:template>
 
 
 
</xsl:stylesheet>
Là il me renvoit juste :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
<?xml version="1.0" encoding="UTF-8"?>
<yyy>
      <resultat>3</resultat>
      <resultat>5</resultat>
</yyy>
Au lieu de :
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
 
 
<yyy>
      <zzz>
	    <resultat>3</resultat>
	    <v1>9</v1>
            <v2>3</v2>
 
     </zzz>
      <zzz>
	        <resultat>5</resultat>
	        <v1>10</v1>
                <v2>2</v2>
     </zzz>
 
</yyy>
Visiblement le template calcul écrase le template de réplication, je ne vois vraiment pas comment juste calculer et en plus pouvoir modifier le champ résultat en xsl :/
Quelqu'un aurait une idée ?

Par avance merci !