Bonjour.
Je pense que je dois confondre plusieurs choses. J'explique, la structure de mon XML est la suivante:
Comme vous pouvez le voir, certains éléments dans /BLOC/CHAMP n'ont pas de prompt ou de valeurs ou les 2.
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="iso8859-1"?> <?xml-stylesheet type="text/xsl" href="test.xsl"?> <GRILLE codtrt="CTA150G50"> <BLOC nom="COMPTE"> <CHAMP nom="CODPLANCTB" prompt="Compte">51299</CHAMP> <CHAMP nom="LIBPLANCTB" prompt="">Banque POMMIER</CHAMP> <CHAMP nom="CODIMM" prompt="Immeuble">0</CHAMP> <CHAMP nom="ADRRED" prompt=""></CHAMP> <CHAMP nom="CODSERV" prompt="Service"></CHAMP> <CHAMP nom="CODCLI" prompt="Propriétaire">1257</CHAMP> </BLOC> <BLOC nom="ECRICTBPROB"> <COLONNES> <TITRE largeur="1">Date</TITRE> <TITRE largeur="1">Journal / N° pièce</TITRE> </COLONNES> <ENR> <CHAMP nom="DATCTB">30/04/2004</CHAMP> <CHAMP nom="CODJOU">JBC</CHAMP> </ENR> <ENR> <CHAMP nom="DATCTB">31/03/2002</CHAMP> <CHAMP nom="CODJOU">JBC</CHAMP> </ENR> </BLOC> </GRILLE>
J'ai commencé à construire ce XSL:
La partie suivante me pose problème:
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
29
30
31
32
33 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output indent="no"/> <xsl:template match="/"> <html> <body><xsl:apply-templates/></body> </html> </xsl:template> <xsl:template match="*[ENR]"> <table border="1"><xsl:apply-templates/></table> </xsl:template> <xsl:template match="ENR"> <tr><xsl:apply-templates/></tr> </xsl:template> <xsl:template match="COLONNES"> <tr><xsl:apply-templates/></tr> </xsl:template> <xsl:template match="TITRE"> <td> <xsl:attribute name="colspan"><xsl:value-of select="@largeur"/></xsl:attribute> <xsl:attribute name="border">1</xsl:attribute> <xsl:apply-templates/></td> </xsl:template> <xsl:template match="ENR/CHAMP"> <td><xsl:apply-templates/></td> </xsl:template> <xsl:template match="BLOC/CHAMP[text()]"> <xsl:if test="@prompt"><br /><xsl:value-of select="@prompt"/> : <xsl:apply-templates/></xsl:if> <xsl:if test="@prompt='*'"> | <xsl:apply-templates/></xsl:if> </xsl:template> <xsl:template match="CHAMP[@prompt='']"> | <xsl:apply-templates/> </xsl:template> </xsl:stylesheet>
<xsl:template match="BLOC/CHAMP[text()]">
<xsl:if test="@prompt"><br /><xsl:value-of select="@prompt"/> : <xsl:apply-templates/></xsl:if>
<xsl:if test="@prompt='*'"> | <xsl:apply-templates/></xsl:if>
</xsl:template>
J'aurai aimé que mon fichier résultat (pour les noeuds /BLOC/CHAMP) soit de la forme:
prompt : valeur
prompt : valeur
et que si le ou les éléments suivant n'ont pas de prompt, alors:
prompt : valeur | valeur2 | valeur3 ...
prompt : valeur | valeur2 | valeur3 ...
* déjà, j'aimerai tester si le champ est vide, alors ne rien afficher. Apparemment, match="BLOC/CHAMP[text()]" ne semble pas la bonne expression? (vu que je n'ai pas une structure en for, je pars toujours de la racine, c'est bien ça?)
* de plus, je ne comprends pas pourquoi <xsl:if test="@prompt='*'"> | <xsl:apply-templates/></xsl:if> est exécuté s'il n'y a pas de prompt alors que si j'essaie <xsl:if test="@prompt=''"> | <xsl:apply-templates/></xsl:if>, ce dernier ne l'est pas. J'aurai plutôt pensé le contraire.
Comment expliquer ce 2ème point et résoudre le premier problème?
Merci de votre aide!
Partager