par
Cyrano » 06 avr. 2008, 20:18
Ok, ça revient sensiblement au même pour le XML : il faut dans ce cas mettre des conditions imbriquées dans la boucle de traitement.
Voici un exemple basique, à toi ensuite d'adapter à ton propre modèle de données.
On va partir d'un simple tableau avec deux colonnes de données :
Code : Tout sélectionner
+--------+-----------+
| genre | prénom |
+--------+-----------+
| garçon | Jean |
| garçon | Jérôme |
| garçon | Pierre |
| garçon | Paul |
| fille | Julie |
| fille | Jeanne |
| fille | Valérie |
+--------+-----------+
En PHP, on va traduire ça comme ceci :
$prenoms = array(
array("genre"=>"garçon", "prenom"=>"Jean"),
array("genre"=>"garçon", "prenom"=>"Jérôme"),
array("genre"=>"garçon", "prenom"=>"Pierre"),
array("genre"=>"garçon", "prenom"=>"Paul"),
array("genre"=>"fille", "prenom"=>"Julie"),
array("genre"=>"fille", "prenom"=>"Jeanne"),
array("genre"=>"fille", "prenom"=>"Valérie")
);
But de la manoeuvre, obtenir une arborescence XML de ce style :
Code : Tout sélectionner
<prenoms>
<garcons>
<prenom>Jean</prenom>
<prenom>Jérôme</prenom>
<prenom>Pierre</prenom>
<prenom>Paul</prenom>
</garcons>
<filles>
<prenom>Julie</prenom>
<prenom>Jeanne</prenom>
<prenom>Valérie</prenom>
</filles>
</prenoms>
On va utiliser une boucle pour parcourir notre tableau de la même manière que tu dois parcourir le retour de ta base de données. Ce que je montre ici, c'est la méthodologie qu'il te faudra utiliser.
À chaque tour de boucle, on va lire une ligne du tableau, mais on ne veut pas écrire "garçon" <a chaque tour, on ne le veux qu'au début de la liste des prénoms de garçon, le fermer ensuite et après, pareil pour les prénoms de filles.
Ça veut d'abord dire que le résultat du tableau doit impérativement être trié dans un ordre, donc dans ton cas, la requête SQL devra impérativement comporter une clause ORDER BY sur une ou plusieurs colonnes.
Ici, j'ai volontairement trié le tableau à la création, la partie qui nous intéresse arrive maintenant.
<?php
$prenoms = array(
array("genre"=>"garçon", "prenom"=>"Jean"),
array("genre"=>"garçon", "prenom"=>"Jérôme"),
array("genre"=>"garçon", "prenom"=>"Pierre"),
array("genre"=>"garçon", "prenom"=>"Paul"),
array("genre"=>"fille", "prenom"=>"Julie"),
array("genre"=>"fille", "prenom"=>"Jeanne"),
array("genre"=>"fille", "prenom"=>"Valérie")
);
/* On ouvre le contenant de base du fichier XML */
$xml = '<prenoms>' . "\n";
$genre = ""; // Pointeur initialisé à "vide"
foreach($prenoms as $index => $tableau)
{
// On vérifie si on a changé de genre
if($tableau['genre'] != $genre)
{
if(!empty($genre))
{
$xml .= ' </'. $genre .'>' . "\n";
}
$xml .= ' <'. $tableau['genre'] .'>' . "\n";
$genre = $tableau['genre'];
}
$xml .= ' <prenom>'. $tableau['prenom'] .'</prenom>' . "\n";
}
/**
* le tour est fini, on ferme le dernier bloc du
* groupe "genre" puisqu'on a plus rebouclé sur une nouvelle valeur
*/
$xml .= ' </'. $genre .'>' . "\n";
/* On peut fermer le fichier XML */
$xml .= '</prenoms>';
echo $xml;
?>
Suis bien les commentaires du code, ils sont importants. Teste ce code, observe et adapte à ton besoin.
Ok, ça revient sensiblement au même pour le XML : il faut dans ce cas mettre des conditions imbriquées dans la boucle de traitement.
Voici un exemple basique, à toi ensuite d'adapter à ton propre modèle de données.
On va partir d'un simple tableau avec deux colonnes de données :
[code]+--------+-----------+
| genre | prénom |
+--------+-----------+
| garçon | Jean |
| garçon | Jérôme |
| garçon | Pierre |
| garçon | Paul |
| fille | Julie |
| fille | Jeanne |
| fille | Valérie |
+--------+-----------+[/code]
En PHP, on va traduire ça comme ceci :
[php]$prenoms = array(
array("genre"=>"garçon", "prenom"=>"Jean"),
array("genre"=>"garçon", "prenom"=>"Jérôme"),
array("genre"=>"garçon", "prenom"=>"Pierre"),
array("genre"=>"garçon", "prenom"=>"Paul"),
array("genre"=>"fille", "prenom"=>"Julie"),
array("genre"=>"fille", "prenom"=>"Jeanne"),
array("genre"=>"fille", "prenom"=>"Valérie")
);[/php]
But de la manoeuvre, obtenir une arborescence XML de ce style :
[code]<prenoms>
<garcons>
<prenom>Jean</prenom>
<prenom>Jérôme</prenom>
<prenom>Pierre</prenom>
<prenom>Paul</prenom>
</garcons>
<filles>
<prenom>Julie</prenom>
<prenom>Jeanne</prenom>
<prenom>Valérie</prenom>
</filles>
</prenoms>[/code]
On va utiliser une boucle pour parcourir notre tableau de la même manière que tu dois parcourir le retour de ta base de données. Ce que je montre ici, c'est la méthodologie qu'il te faudra utiliser.
À chaque tour de boucle, on va lire une ligne du tableau, mais on ne veut pas écrire "garçon" <a chaque tour, on ne le veux qu'au début de la liste des prénoms de garçon, le fermer ensuite et après, pareil pour les prénoms de filles.
Ça veut d'abord dire que le résultat du tableau doit impérativement être trié dans un ordre, donc dans ton cas, la requête SQL devra impérativement comporter une clause ORDER BY sur une ou plusieurs colonnes.
Ici, j'ai volontairement trié le tableau à la création, la partie qui nous intéresse arrive maintenant.
[php]<?php
$prenoms = array(
array("genre"=>"garçon", "prenom"=>"Jean"),
array("genre"=>"garçon", "prenom"=>"Jérôme"),
array("genre"=>"garçon", "prenom"=>"Pierre"),
array("genre"=>"garçon", "prenom"=>"Paul"),
array("genre"=>"fille", "prenom"=>"Julie"),
array("genre"=>"fille", "prenom"=>"Jeanne"),
array("genre"=>"fille", "prenom"=>"Valérie")
);
/* On ouvre le contenant de base du fichier XML */
$xml = '<prenoms>' . "\n";
$genre = ""; // Pointeur initialisé à "vide"
foreach($prenoms as $index => $tableau)
{
// On vérifie si on a changé de genre
if($tableau['genre'] != $genre)
{
if(!empty($genre))
{
$xml .= ' </'. $genre .'>' . "\n";
}
$xml .= ' <'. $tableau['genre'] .'>' . "\n";
$genre = $tableau['genre'];
}
$xml .= ' <prenom>'. $tableau['prenom'] .'</prenom>' . "\n";
}
/**
* le tour est fini, on ferme le dernier bloc du
* groupe "genre" puisqu'on a plus rebouclé sur une nouvelle valeur
*/
$xml .= ' </'. $genre .'>' . "\n";
/* On peut fermer le fichier XML */
$xml .= '</prenoms>';
echo $xml;
?>[/php]
Suis bien les commentaires du code, ils sont importants. Teste ce code, observe et adapte à ton besoin.