Bonjour,

Je vais vous donner une brève explication de mon problème en espérant être le plus clair possible:
J'ai un xml genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8

<ortho descr="test" doctorEmail="" ...>
   <destinat label="med traitant">Dr. machin rue des lilas ....</destinat>
   <copie label="En copie">à dr Truc</copie>
   <champ1 label="commentaires"></champ1>
  .....
</ortho>
Alors moi on m'a appris de la manière suivante à accéder aux éléments :
Je suis dans une boucle
<xsl:for-each select="child::*[1]"> De là j'appelle un template "begin"
(je reprends depuis qqs mois le code de mon prédécesseur, c'est un genre de squelette où il ne reste plus qu'à intégrer les élément ci-dessous)
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
….
< ...Begin >
<fo:table-row>
  <xsl:apply-template select="*[1]"/>
 <xsl:apply-template select="*[2]"/>
 <xsl:apply-template select="*[3]"/>
.....et ainsi de suite
</...>
</ ...Begin>
….
<xsl:template match="*">
   <xsl:variable name="name" select="name()"/>
   <xsl:variable name="label" select="@label"/>	
   <xsl:choose>
	<xsl:when test="$name='champ1'">
		<xsl:call-template name="elemList"/>
	</xsl:when>
  </xsl:choose>
</xsl:template>
Le problème suivant se pose quand les personnes désirent ajouter un champ (généralement en plein milieu du bazar !!) Imaginons ici en 2eme position tous ce qui se trouvent à la suite est décalé!!

J'aimerais donc, au lieu d'accéder aux éléments via des numéros y accéder par leur nom par exemple. Donc directement dire si $name=’champ1’ alors call-template ….
Donc si j’ai bien compris les tutos et cours (ce qui ne doit pas être le cas)
Dans le « Begin » j’ai mis :
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

< ...Begin >
<fo:table-row>
<for-each select=”*[1]/*”>
  <xsl:apply-template select="."/>
…
</for- each>
</...>
</ ...Begin>

<xsl:template match="*">
   <xsl:variable name="name" select="name()"/>
   <xsl:variable name="label" select="@label"/>	
   <xsl:choose>
	<xsl:when test="$name='champ1'">
		<xsl:call-template name="elemList"/>
	</xsl:when>
  </xsl:choose>
</xsl:template>
Le « . » devrait « entrer » dans mon élément courant non ??

Si pas comment accéder à ce qui correspond à name() ?? Comment l’utiliser si je fais

//*[1]/*[1]/child ::text() ou //*[1]/*[1]/@label ça marche pourquoi //*[1]/*[1]/name() ne marche pas ??

Merci d'avance