[XSL] : xsl:for-each avec condition problème
Bonjour à tous,
Voilà 2 jours que je tourne en rond pour réussir à mettre en page mon xml via xsl
Voici un exemple de fichier xml
Code:
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
| <ROWSET>
<ROW num="1">
<Id>85854</Id>
<CONT_PRENOM>SOC. & DE SANTE ASBL</CONT_PRENOM>
<CONT_NOM>ASSOC. CHRETIENNE DES INSTITUTIONS</CONT_NOM>
<NUM_CLIENT>4784314</NUM_CLIENT>
<COAD_ADRESSE_DIRECTE>O</COAD_ADRESSE_DIRECTE>
<CONT_CLIENT>C</CONT_CLIENT>
<TCON_CODE>412 - MAISONS DE REPOS</TCON_CODE>
<TIND_CODE>2608</TIND_CODE>
<TIND_DESC>CBC BANQUE TOURNAI SUCCURSALE</TIND_DESC>
<Adresse>AVENUE DE LA PAIRELLE, 33 B3</Adresse>
<Localité>5000 NAMUR</Localité>
</ROW>
<ROW num="2">
<Id>85854</Id>
<CONT_PRENOM>SOC. & DE SANTE ASBL</CONT_PRENOM>
<CONT_NOM>ASSOC. CHRETIENNE DES INSTITUTIONS</CONT_NOM>
<NUM_CLIENT>4784314</NUM_CLIENT>
<COAD_ADRESSE_DIRECTE>O</COAD_ADRESSE_DIRECTE>
<CONT_CLIENT>C</CONT_CLIENT>
<TCON_CODE>412 - MAISONS DE REPOS</TCON_CODE>
<TIND_CODE>2608</TIND_CODE>
<TIND_DESC>CBC BANQUE TOURNAI SUCCURSALE</TIND_DESC>
<Adresse>AVENUE DE LA PAIRELLE, 33-34 4</Adresse>
<Localité>5000 NAMUR</Localité>
</ROW>
<ROW num="3">
<Id>85854</Id>
<CONT_PRENOM>SOC. & DE SANTE ASBL</CONT_PRENOM>
<CONT_NOM>ASSOC. CHRETIENNE DES INSTITUTIONS</CONT_NOM>
<NUM_CLIENT>4784314</NUM_CLIENT>
<COAD_ADRESSE_DIRECTE>O</COAD_ADRESSE_DIRECTE>
<CONT_CLIENT>C</CONT_CLIENT>
<TCON_CODE>412 - MAISONS DE REPOS</TCON_CODE>
<TIND_CODE>2640</TIND_CODE>
<TIND_DESC>CBC BANQUE MONS SUCCURSALE</TIND_DESC>
<Adresse>AVENUE DE LA PAIRELLE, 33 B3</Adresse>
<Localité>5000 NAMUR</Localité>
</ROW>
<ROW num="4">
<Id>85854</Id>
<CONT_PRENOM>SOC. & DE SANTE ASBL</CONT_PRENOM>
<CONT_NOM>ASSOC. CHRETIENNE DES INSTITUTIONS</CONT_NOM>
<NUM_CLIENT>4784314</NUM_CLIENT>
<COAD_ADRESSE_DIRECTE>O</COAD_ADRESSE_DIRECTE>
<CONT_CLIENT>C</CONT_CLIENT>
<TCON_CODE>412 - MAISONS DE REPOS</TCON_CODE>
<TIND_CODE>2640</TIND_CODE>
<TIND_DESC>CBC BANQUE MONS SUCCURSALE</TIND_DESC>
<Adresse>AVENUE DE LA PAIRELLE, 33-34 4</Adresse>
<Localité>5000 NAMUR</Localité>
</ROW>
<ROW num="5">
<Id>85854</Id>
<CONT_PRENOM>SOC. & DE SANTE ASBL</CONT_PRENOM>
<CONT_NOM>ASSOC. CHRETIENNE DES INSTITUTIONS</CONT_NOM>
<NUM_CLIENT>4784314</NUM_CLIENT>
<COAD_ADRESSE_DIRECTE>O</COAD_ADRESSE_DIRECTE>
<CONT_CLIENT>C</CONT_CLIENT>
<TCON_CODE>412 - MAISONS DE REPOS</TCON_CODE>
<TIND_CODE>2853</TIND_CODE>
<TIND_DESC>CBC GESTION PRIVEE</TIND_DESC>
<Adresse>AVENUE DE LA PAIRELLE, 33-34 4</Adresse>
<Localité>5000 NAMUR</Localité>
</ROW>
<ROW num="6">
<Id>85854</Id>
<CONT_PRENOM>SOC. & DE SANTE ASBL</CONT_PRENOM>
<CONT_NOM>ASSOC. CHRETIENNE DES INSTITUTIONS</CONT_NOM>
<NUM_CLIENT>4784314</NUM_CLIENT>
<COAD_ADRESSE_DIRECTE>O</COAD_ADRESSE_DIRECTE>
<CONT_CLIENT>C</CONT_CLIENT>
<TCON_CODE>412 - MAISONS DE REPOS</TCON_CODE>
<TIND_CODE>2664</TIND_CODE>
<TIND_DESC>CBC BANQUE NAMUR SUCCURSALE</TIND_DESC>
<Adresse>AVENUE DE LA PAIRELLE, 33-34 4</Adresse>
<Localité>5000 NAMUR</Localité>
</ROW>
<ROW num="7">
<Id>85854</Id>
<CONT_PRENOM>SOC. & DE SANTE ASBL</CONT_PRENOM>
<CONT_NOM>ASSOC. CHRETIENNE DES INSTITUTIONS</CONT_NOM>
<NUM_CLIENT>4784314</NUM_CLIENT>
<COAD_ADRESSE_DIRECTE>O</COAD_ADRESSE_DIRECTE>
<CONT_CLIENT>C</CONT_CLIENT>
<TCON_CODE>412 - MAISONS DE REPOS</TCON_CODE>
<TIND_CODE>2757</TIND_CODE>
<TIND_DESC>CBC BANQUE NAMUR SUCCURSALE-GE</TIND_DESC>
<Adresse>AVENUE DE LA PAIRELLE, 33 B3</Adresse>
<Localité>5000 NAMUR</Localité>
</ROW>
<ROW num="8">
<Id>85854</Id>
<CONT_PRENOM>SOC. & DE SANTE ASBL</CONT_PRENOM>
<CONT_NOM>ASSOC. CHRETIENNE DES INSTITUTIONS</CONT_NOM>
<NUM_CLIENT>4784314</NUM_CLIENT>
<COAD_ADRESSE_DIRECTE>O</COAD_ADRESSE_DIRECTE>
<CONT_CLIENT>C</CONT_CLIENT>
<TCON_CODE>412 - MAISONS DE REPOS</TCON_CODE>
<TIND_CODE>2757</TIND_CODE>
<TIND_DESC>CBC BANQUE NAMUR SUCCURSALE-GE</TIND_DESC>
<Adresse>AVENUE DE LA PAIRELLE, 33-34 4</Adresse>
<Localité>5000 NAMUR</Localité>
</ROW>
<ROW num="9">
<Id>85854</Id>
<CONT_PRENOM>SOC. & DE SANTE ASBL</CONT_PRENOM>
<CONT_NOM>ASSOC. CHRETIENNE DES INSTITUTIONS</CONT_NOM>
<NUM_CLIENT>4784314</NUM_CLIENT>
<COAD_ADRESSE_DIRECTE>O</COAD_ADRESSE_DIRECTE>
<CONT_CLIENT>C</CONT_CLIENT>
<TCON_CODE>412 - MAISONS DE REPOS</TCON_CODE>
<TIND_CODE>2853</TIND_CODE>
<TIND_DESC>CBC GESTION PRIVEE</TIND_DESC>
<Adresse>AVENUE DE LA PAIRELLE, 33 B3</Adresse>
<Localité>5000 NAMUR</Localité>
</ROW>
<ROW num="10">
<Id>85854</Id>
<CONT_PRENOM>SOC. & DE SANTE ASBL</CONT_PRENOM>
<CONT_NOM>ASSOC. CHRETIENNE DES INSTITUTIONS</CONT_NOM>
<NUM_CLIENT>4784314</NUM_CLIENT>
<COAD_ADRESSE_DIRECTE>O</COAD_ADRESSE_DIRECTE>
<CONT_CLIENT>C</CONT_CLIENT>
<TCON_CODE>412 - MAISONS DE REPOS</TCON_CODE>
<TIND_CODE>2664</TIND_CODE>
<TIND_DESC>CBC BANQUE NAMUR SUCCURSALE</TIND_DESC>
<Adresse>AVENUE DE LA PAIRELLE, 33 B3</Adresse>
<Localité>5000 NAMUR</Localité>
</ROW>
</ROWSET> |
Donc voici un exemple de recherche pour 1 client
Attention, un client peux posséder maximum 2 adresses mais être reliés à plusieurs TIND_CODE dans le cas ci-dessus il y a 5 TIND_CODE.
Donc mon code actuel affiche le client suivi de 10 adresses.
Je voudrais qu'il affiche que les adresses qui sont différentes, donc par exemple pour le cas ci-dessus, je voudrais qu'il affiche une fois le client et ensuite les 2 adresses.
Ci-joint mon code actuel
Code:
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
| <?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<HTML>
<HEAD>
<LINK rel="stylesheet" href='html/mcic/style/CBCinet.css'/>
<LINK rel="stylesheet" href='html/mcic/style/mcic.css'/>
</HEAD>
<BODY onload="parent.frDown.location.href='html/mcic/blank.html';">
<TABLE width="100%" border="0" cellspacing='0'>
<TR>
<TD>
<xsl:apply-templates select="ROWSET/ROW"/>
</TD>
</TR>
</TABLE>
<!-- Message si aucun ROW n'est détecté-->
<xsl:if test= "not(/ROWSET/ROW)">
<BR/>
<TABLE border='0' width='100%'>
<TR align='center'><TD>
<LABEL>Aucun résultat !</LABEL>
</TD></TR>
</TABLE>
</xsl:if>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="ROW">
<xsl:variable name="currid">
<xsl:value-of select="Id"/>
</xsl:variable>
<xsl:variable name="nextid">
<xsl:value-of select="following-sibling::*[1]/Id"/>
</xsl:variable>
<xsl:variable name="previd">
<xsl:value-of select="preceding-sibling::*[1]/Id"/>
</xsl:variable>
<xsl:variable name="adr_suppr">
<xsl:value-of select="ADR_SUPPRIMEE"/>
</xsl:variable>
<xsl:variable name="currad">
<xsl:value-of select="Adresse"/>
</xsl:variable>
<xsl:variable name="nextad">
<xsl:value-of select="following-sibling::*[1]/Adresse"/>
</xsl:variable>
<xsl:variable name="prevad">
<xsl:value-of select="preceding-sibling::*[1]/Adresse"/>
</xsl:variable>
<TABLE border='1' width='100%' bordercolor ='blue' >
<xsl:if test="@num = '1' or $previd != $currid or $previd=$currid">
<!-- dans ce cas, on est en début de fiche => on utilise la classe fiche-recherche-top -->
<xsl:attribute name="class">fiche-recherche-top</xsl:attribute>
</xsl:if>
<xsl:if test="$previd=$currid and $nextid = $currid ">
<!-- dans ce cas, on est en milieu de fiche => on utilise la classe fiche-recherche-middle -->
<xsl:attribute name="class">fiche-recherche-middle</xsl:attribute>
</xsl:if>
<xsl:if test="$nextid != $currid">
<!-- dans ce cas, on est en fin de fiche => on utilise la classe fiche-recherche-bottom -->
<xsl:attribute name="class">fiche-recherche-bottom</xsl:attribute>
</xsl:if>
<!--test si le précédent est le meme ou non-->
<xsl:if test="@num = '1' or $previd != $currid">
<THEAD>
<TH align='left'>
<A target='frCenter' title='Aller à la fiche contact' class='header'>
<xsl:attribute name="href">/MCIC/Contact?contid=<xsl:value-of select="Id"/></xsl:attribute>
<xsl:value-of select="CONT_PRENOM"/>*<xsl:value-of select="CONT_NOM"/>
( <xsl:value-of select="NUM_CLIENT"/> )<BR/>
</A>
</TH>
</THEAD>
</xsl:if>
<TBODY>
<TR>
<TD>
<xsl:value-of select="Adresse"/><BR/>
</TD>
</TR>
<TR>
<TD>
<xsl:value-of select="Localité"/><BR/>
</TD>
</TR>
</TBODY>
</TABLE>
<xsl:if test="$nextid != $currid">
<BR/>
</xsl:if>
</xsl:template>
</xsl:stylesheet> |
Et voici un exemple de ce que je voudrais avoir en retour
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| SOC. & DE SANTE ASBL ASSOC. CHRETIENNE DES INSTITUTIONS ( 4784314 )
AVENUE DE LA PAIRELLE, 33 B3
5000 NAMUR
Code indice : 2608
Code indice : 2640
Code indice : 2757
Code indice : 2853
Code indice : 2664
AVENUE DE LA PAIRELLE, 33-34 4
5000 NAMUR
Code indice : 2608
Code indice : 2640
Code indice : 2853
Code indice : 2664
Code indice : 2757 |
Je voudrais donc qu'il affiche une seul fois le nom, là, il n'y a pas de problème, je voudrais qu'il affiche les 2 adresses si elles sont différentes et je voudrais qu'il affiche tout les codes indices en relation avec l'adresse.
Si vous avez une piste, je suis preneur
D'avance merci à tous pour votre aide