Bonjour,

Je voulais poser une question sur une utilisation simple du for-each en xsl.

Voila un petit xml :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<personnes>
<personne>Toto</personne>
<personne>Titi</personne>
</personnes>
</Root>
et voila un xsl :

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
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
<xsl:output 
  method="xml"
  encoding="UTF-8"
  indent="yes" 
  />
 
<xsl:template match="/Root/personnes">
	<xsl:for-each select=".">
		<xsl:copy>
			<xsl:value-of select="."/>
		</xsl:copy>
	</xsl:for-each>
</xsl:template>
 
</xsl:stylesheet>
Je ne comprends pas pourquoi cela me donne en résultat :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
<?xml version="1.0" encoding="UTF-8"?>
<personnes>
Toto
Titi
</personnes>
cad que chaque balise "personne" n'est pas recopié.

l'expression XPath "." du for-each représente juste les noeuds fils texte de l'élément "personnes" ?

Apparemment, le fait qu'il recopie la balise "personnes" vient du xsl:copy.

Et donc cela voudrait dire que si on veut reprendre la balise personne, il faudrait forcément un template qui matche personne et utiliser un xsl:copy (ou un template générique si on a pas de traitement particuler).

Merci :-)