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 :
Alors moi on m'a appris de la manière suivante à accéder aux éléments :
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>
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)
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é!!
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>
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 :
Le « . » devrait « entrer » dans mon élément courant non ??
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>
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![]()
Partager