XSL regroupent dans des boucles
nagdrir
Messages postés
24
Statut
Membre
-
nagdrir Messages postés 24 Statut Membre -
nagdrir Messages postés 24 Statut Membre -
Bonjour,
J'ai un fichier xml dont la partie Resultat est la suivante :
J'ai fait un xsl pour lister dans un tableau l'ensemble des données :
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.
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.
A voir également:
- XSL regroupent dans des boucles
- Les boucles for sur matlab ✓ - Forum Matlab
- Création d'un fichier PDF,avec xsl-fo et fop - Forum Programmation
- [Bash] Boucles whiles imbriquées ne fonctionnent pas ✓ - Forum Programmation
- Boucle sur des lettres ✓ - Forum VB / VBA
- [SHELL]Addition dans une boucle ✓ - Forum Programmation
2 réponses
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>