Bonjour,

Je ne savais comment décrire mon problème alors le titre peut ne pas vous sembler correct, si tel est le cas je modifierais.

J'ai un fichier XML qui se présente de la façon suivante :

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
 
<librairie>
<documents>
<document type="livre" nbexemplaires="1" >
  <titre>Theorie de la musique</titre> 
  <auteur>A. Danhauser</auteur> 
  <langue>francais</langue>
  <date_edition>1996</date_edition> 
  </document>
<document type="livre" nbexemplaires="2">
  <titre>Design Patterns - Elements of Reusable Object-Oriented Software</titre> 
  <auteur>Erich Gamma</auteur> 
  <auteur>Richard Helm</auteur> 
  <auteur>Ralph Johnson</auteur> 
  <auteur>John Vlissides</auteur> 
  <langue>anglais</langue>
  <date_edition>1995</date_edition> 
  </document>
</documents>
</librairie>
J'ai volontairement réduit le fichier.

Maintenant à l'aide de feuille de style je voudrais générer un fichier TXT, mais jusque là pas de problème, voici le code que j'utilise :

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
 
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
 
	<xsl:template match="/">
			<xsl:apply-templates select="librairie"/>
	</xsl:template>
 
	<xsl:template match="librairie">
  Librairie :
 *************
			<xsl:apply-templates select="documents/document"/>
	</xsl:template>
 
	<xsl:template match="document">
<xsl:number format="1/ "/>Titre : <xsl:value-of select="titre"/>
		auteur : <xsl:value-of select="auteur"/>
		<xsl:text>
		</xsl:text>
	</xsl:template>	
</xsl:stylesheet>
Cela me génère un fichier texte qui se présente de la sorte :

Librairie
******

Nombre de documents : XX

1/ Titre : blabla
Auteur : blabla

2/ Titre : blabla
Auteur : blabla
Mon problème est que j'aimerais que lorsqu'il y a plusieurs auteurs cela apparaisse comme ceci :

X/ Titre : blabla
Auteur : bleble
Auteur : blabla
Etc...
Mais j'ai tenté avec un for-each et le résultat ne me donne pas satisfaction, voici mon code :

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
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />

	<xsl:template match="/">
			<xsl:apply-templates select="librairie"/>
	</xsl:template>

	<xsl:template match="librairie">
  Librairie :
 *************
 
 
			<xsl:apply-templates select="documents/document"/>
	</xsl:template>

	<xsl:template match="document">
__________________________________________________________________________
<xsl:number format="1/ "/>Titre : <xsl:value-of select="titre"/>
<xsl:for-each select="auteur">
		auteur : <xsl:value-of select="auteur"/>
		<xsl:text>
		</xsl:text>
		</xsl:for-each>
	</xsl:template>
	
</xsl:stylesheet>
Mais en fait cela ne marche pas, j'obtient ceci :

Librairie
******

Nombre de documents : XX

1/ Titre : blabla
Auteur :
Auteur :
Auteur :

2/ Titre : blabla
Auteur :
Le mot "Auteur :" apparait bien autant de fois que la balise <auteur> est présente, mais le value-of ne marche plus...

Si quelqu'un peut se pencher sur mon problème.

Merci d'avance.

JP