[XPath]Problème de récupération de Nom de noeud
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:
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:
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:
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:)