XSL regroupent dans des boucles

Fermé
nagdrir Messages postés 24 Date d'inscription dimanche 15 juillet 2007 Statut Membre Dernière intervention 4 septembre 2007 - 17 août 2007 à 12:20
nagdrir Messages postés 24 Date d'inscription dimanche 15 juillet 2007 Statut Membre Dernière intervention 4 septembre 2007 - 4 sept. 2007 à 09:12
Bonjour,

J'ai un fichier xml dont la partie Resultat est la suivante :

<sit_liste>
<NOM>
<![CDATA[ Crêperie du Vincou
  ]]> 
  </NOM>
<ADRPROD_LIBELLE_COMMUNE>
<![CDATA[ Bellac
  ]]> 
  </ADRPROD_LIBELLE_COMMUNE>
  </sit_liste>
<sit_liste>
<NOM>
<![CDATA[ Le BLanzac
  ]]> 
  </NOM>
<ADRPROD_LIBELLE_COMMUNE>
<![CDATA[ Bellac
  ]]> 
  </ADRPROD_LIBELLE_COMMUNE>
<ADRPROD_TEL>
<![CDATA[ 05 55 60 24 53
  ]]> 
  </ADRPROD_TEL>
  </sit_liste>
<sit_liste>
<NOM>
<![CDATA[ Chez Boulette
  ]]> 
  </NOM>
<ADRPROD_LIBELLE_COMMUNE>
<![CDATA[ Bellac
  ]]> 
  </ADRPROD_LIBELLE_COMMUNE>
<ADRPROD_TEL>
<![CDATA[ 05 55 68 83 82
  ]]> 
  </ADRPROD_TEL>
  </sit_liste>
<sit_liste>
<NOM>
<![CDATA[ Cafétaria Lamartine
  ]]> 
  </NOM>
<ADRPROD_LIBELLE_COMMUNE>
<![CDATA[ Bellac
  ]]> 
  </ADRPROD_LIBELLE_COMMUNE>
<ADRPROD_TEL>
<![CDATA[ 05 55 68 48 37
  ]]> 
  </ADRPROD_TEL>
  </sit_liste>
<sit_liste>
<NOM>
<![CDATA[ Le Palais
  ]]> 
  </NOM>
<ADRPROD_LIBELLE_COMMUNE>
<![CDATA[ Bellac
  ]]> 
  </ADRPROD_LIBELLE_COMMUNE>
<ADRPROD_TEL>
<![CDATA[ 05 55 68 06 24
  ]]> 
  </ADRPROD_TEL>
  </sit_liste>
<sit_liste>
<NOM>
<![CDATA[ Café du Pont de la Pierre
  ]]> 
  </NOM>
<ADRPROD_LIBELLE_COMMUNE>
<![CDATA[ Bellac
  ]]> 
  </ADRPROD_LIBELLE_COMMUNE>
<ADRPROD_TEL>
<![CDATA[ 06 74 50 90 79
  ]]> 
  </ADRPROD_TEL>
  </sit_liste>
<sit_liste>
<NOM>
<![CDATA[ Auberge des quatre saisons
  ]]> 
  </NOM>
<ADRPROD_LIBELLE_COMMUNE>
<![CDATA[ Bellac
  ]]> 
  </ADRPROD_LIBELLE_COMMUNE>
<ADRPROD_TEL>
<![CDATA[ 05 55 53 45 45
  ]]> 
  </ADRPROD_TEL>
  </sit_liste>
<sit_liste>
<NOM>
<![CDATA[ Auberge du Vincou
  ]]> 
  </NOM>
<ADRPROD_LIBELLE_COMMUNE>
<![CDATA[ Bellac
  ]]> 
  </ADRPROD_LIBELLE_COMMUNE>
<ADRPROD_TEL>
<![CDATA[ 05 55 68 75 61
  ]]> 
  </ADRPROD_TEL>
  </sit_liste>
<sit_liste>
<NOM>
<![CDATA[ Ferme Auberge Catherine et Alex Kubiac Le Queré
  ]]> 
  </NOM>
<ADRPROD_LIBELLE_COMMUNE>
<![CDATA[ Blanzac
  ]]> 
  </ADRPROD_LIBELLE_COMMUNE>
<ADRPROD_TEL>
<![CDATA[ 05 55 68 02 14
  ]]> 
  </ADRPROD_TEL>
  </sit_liste>
<sit_liste>
<NOM>
<![CDATA[ Restaurant Epicerie
  ]]> 
  </NOM>
<ADRPROD_LIBELLE_COMMUNE>
<![CDATA[ Bussière Boffy
  ]]> 
  </ADRPROD_LIBELLE_COMMUNE>
<ADRPROD_TEL>
<![CDATA[ 05 55 68 87 74
  ]]> 
  </ADRPROD_TEL>
  </sit_liste>
<sit_liste>
<NOM>
<![CDATA[ Café restaurant de la poste
  ]]> 
  </NOM>
<ADRPROD_LIBELLE_COMMUNE>
<![CDATA[ Bussière Poitevine
  ]]> 
  </ADRPROD_LIBELLE_COMMUNE>
<ADRPROD_TEL>
<![CDATA[ 05 55 60 31 17
  ]]> 
  </ADRPROD_TEL>
  </sit_liste>
<sit_liste>
<NOM>
<![CDATA[ Auberge de Nouic
  ]]> 
  </NOM>
<ADRPROD_LIBELLE_COMMUNE>
<![CDATA[ Nouic
  ]]> 
  </ADRPROD_LIBELLE_COMMUNE>
<ADRPROD_TEL>
<![CDATA[ 05 55 68 71 48
  ]]> 
  </ADRPROD_TEL>
  </sit_liste>
<sit_liste>
<NOM>
<![CDATA[ Chez Sylvie
  ]]> 
  </NOM>
<ADRPROD_LIBELLE_COMMUNE>
<![CDATA[ Peyrat de Bellac
  ]]> 
  </ADRPROD_LIBELLE_COMMUNE>
<ADRPROD_TEL>
<![CDATA[ 05 55 68 11 02
  ]]> 
  </ADRPROD_TEL>
  </sit_liste>
<sit_liste>
<NOM>
<![CDATA[ L'Etape
  ]]> 
  </NOM>
<ADRPROD_LIBELLE_COMMUNE>
<![CDATA[ St Bonnet de Bellac
  ]]> 
  </ADRPROD_LIBELLE_COMMUNE>
<ADRPROD_TEL>
<![CDATA[ 05 55 60 09 47
  ]]> 
  </ADRPROD_TEL>
  </sit_liste>
  </Resultat>
<Les_temps>


J'ai fait un xsl pour lister dans un tableau l'ensemble des données :

<?xml version="1.0" encoding="iso-8859-1"?><!-- DWXMLSource="/esh.xml" --><!DOCTYPE xsl:stylesheet  [
	<!ENTITY nbsp   " ">
	<!ENTITY copy   "©">
	<!ENTITY reg    "®">
	<!ENTITY trade  "™">
	<!ENTITY mdash  "—">
	<!ENTITY ldquo  "“">
	<!ENTITY rdquo  "”"> 
	<!ENTITY pound  "£">
	<!ENTITY yen    "¥">
	<!ENTITY euro   "€">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
<xsl:template match="/">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>Untitled Document</title>
<style type="text/css">
<xsl:comment>
body,td,th {
	color: #000099;
}
body {
	background-color: #FFFF33;
}
</xsl:comment>
</style></head>

<body><table width="100%" border="0">
<xsl:for-each select="LEI/Resultat/sit_liste">
  <tr>
    <td width="21%"><xsl:value-of select="NOM" disable-output-escaping="yes"/></td>
    <td width="39%"><xsl:value-of select="ADRPROD_LIBELLE_COMMUNE" disable-output-escaping="yes"/></td>
    <td width="40%"><xsl:value-of select="ADRPROD_TEL" disable-output-escaping="yes"/></td>
  </tr>
 </xsl:for-each> 
</table>

</body>
</html>

</xsl:template>
</xsl:stylesheet>


Ce que je veux obtenir c'est :
Pour chaque ADRPROD_LIBELLE_COMMUNE :

ADRPROD_LIBELLE_COMMUNE
(puis boucler dans un tableau pour chaque ADRPROD_LIBELLE_COMMUNE)

Nom
ADRPROD_LIBELLE_COMMUNE
ADRPROD_TEL

(puis un trait pour passer à l'autre ADRPROD_LIBELLE_COMMUNE)

J'essaie depuis plus d'une semaine à triturer les tableaux, les for-each... dans tous les sens et je ne suis jamais tombé sur ce que je cherchais... bien entendu !!!
J'espère que vous pourrez m'aider à trouver la solution. Merci.

2 réponses

nagdrir Messages postés 24 Date d'inscription dimanche 15 juillet 2007 Statut Membre Dernière intervention 4 septembre 2007 1
4 sept. 2007 à 09:11
Voilà, j'ai trouvé la réponse, si ça peut aider je la mets :

<?xml version="1.0" encoding="iso-8859-1"?><!-- DWXMLSource="esh.xml" --><!DOCTYPE xsl:stylesheet  [
	<!ENTITY nbsp   " ">
	<!ENTITY copy   "©">
	<!ENTITY reg    "®">
	<!ENTITY trade  "™">
	<!ENTITY mdash  "—">
	<!ENTITY ldquo  "“">
	<!ENTITY rdquo  "”"> 
	<!ENTITY pound  "£">
	<!ENTITY yen    "¥">
	<!ENTITY euro   "€">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
<xsl:key name="tri-par-ville" match="LEI/Resultat/sit_liste" use="ADRPROD_LIBELLE_COMMUNE"/>
<xsl:template match="/">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>Restaurants</title>

</head>
<style type="text/css">
<xsl:comment>
.Style5 {
	font-family: Arial;
	font-size: small;
	font-weight: bold;
}
.Style6 {
	font-family: Arial;
	font-size: x-small;
	font-weight: bold;
}
.Style7 {
	font-family: Arial;
	font-size: x-small;
}
</xsl:comment>
</style>
<body>

<xsl:for-each select="LEI/Resultat/sit_liste[count(. | key('tri-par-ville', ADRPROD_LIBELLE_COMMUNE)[1]) = 1]">
	<xsl:sort select="ADRPROD_LIBELLE_COMMUNE"/>
	<br />
	<span class="Style5"><xsl:value-of select="ADRPROD_LIBELLE_COMMUNE" /></span><br/>
	<xsl:for-each select="key('tri-par-ville',ADRPROD_LIBELLE_COMMUNE)">
		<span class="Style6"><strong><xsl:value-of select="NOM" /></strong></span>  <br /> 
		<xsl:if test="ADRPROD_COMPL_ADRESSE"><span class="Style7"><xsl:value-of select="ADRPROD_COMPL_ADRESSE" /></span><br /></xsl:if>
		<span class="Style7"><xsl:value-of select="ADRPROD_CP" /></span> 
		<span class="Style7"><xsl:value-of select="ADRPROD_LIBELLE_COMMUNE" /></span><br />
		<xsl:if test="ADRPROD_TEL"><span class="Style7"><xsl:text>Tél. : </xsl:text><xsl:value-of select="ADRPROD_TEL" /></span><br /></xsl:if>
		<br />
	</xsl:for-each>
</xsl:for-each>

</body>
</html>

</xsl:template>
</xsl:stylesheet>
0
nagdrir Messages postés 24 Date d'inscription dimanche 15 juillet 2007 Statut Membre Dernière intervention 4 septembre 2007 1
4 sept. 2007 à 09:12
Je mets résolu !
0