8722 sujets

Développement web côté serveur, CMS

Bonjour

Comme indiquer dans le titre j'aimerais crée un fichier xml via du code php, pour se faire j'ai :

- Des éléments qui sont dans une base de donnée.
- Une page pour sélectionner ce que l'on veut ajouter au XML ( Récupération de l'id )
- Une structure précis a crée dans le xml.

J'arrive a crée le fichier XML sans problème, j'arrive aussi a avoir toute ma structure sans soucis DU MOMENT que je n'ai qu'un élément sélectionner. Si j'en sélectionne un deuxième ma structure XML ne fonctionne plus car elle se dédouble. Voici un exemple de ce qui se passe :

Voici un schèma comme exemple :


<collection>
<livre>
   <titre></titre>
   <auteur></auteur>
   <annee></annee>
   <appreciation></appreciation>
    <detail>
        <annee_publication><annee_publication>
        <nombre_page></nombre_page>
   </detail>
</livre>
</collection>



Ce que j'aimerais obtenir est ceci ;


<collection>
<livre>
   <titre></titre>
   <auteur></auteur>
   <annee></annee>
   <appreciation></appreciation>
    <detail>
        <annee_publication><annee_publication>
        <nombre_page></nombre_page>
   </detail>
</livre>
<livre>
   <titre></titre>
   <auteur></auteur>
   <annee></annee>
   <appreciation></appreciation>
    <detail>
        <annee_publication><annee_publication>
        <nombre_page></nombre_page>
   </detail>
</livre>
</collection>



Mais j'obtiens ceci :


<collection>
<livre>
   <titre></titre>
   <auteur></auteur>
   <annee></annee>
   <appreciation></appreciation>
    <titre></titre>
   <auteur></auteur>
   <annee></annee>
   <appreciation></appreciation>
    <detail>
        <annee_publication><annee_publication>
        <nombre_page></nombre_page>
        <annee_publication><annee_publication>
        <nombre_page></nombre_page>
   </detail>
</livre>
</collection>


Si quelqu'un sait m'aider a trouver la solution.

Niveau code j'utilise un "foreach ($tabcheck as $checking)" (Par rapport au nombre d’élément cocher sur la page juste avant ) suivit d'un "while" pour pouvoir récupérer en boucle mes données dans ma base par rapport à l'id de ce qui a été sélectionner.
Modifié par Deynox (30 Jun 2014 - 19:00)
$doc = new DOMDocument();
			$doc->version = '1.0';
			$doc->encoding = 'UTF-8';
			$doc->formatOutput = TRUE;
			$metadata1 = $doc->createElement('collection');
			$metadata2 = $doc->createElement('livre');		
			$metadata3 = $doc->createElement('detail');
			$doc->appendChild($metadata1);

if(isset($_POST['exporter']) && !empty($_POST['checking']))
{
	$tabcheck = $_POST['checking'];

foreach ($tabcheck as $checking)
	{
		$idL = addslashes($checking);

$retour = mysql_query("SELECT * FROM livre_info WHERE id ='$idL'");
		while ($donnees = mysql_fetch_array($retour)){ 

				$titre  = $donnees['titre']; $add_titre = $doc->createElement('titre',$titre);
				$auteur  = $donnees['auteur']; $add_auteur = $doc->createElement('auteur',$auteur);
				$annee  = $donnees['annee']; $add_annee= $doc->createElement('annee',$annee);
				$appreciation = $donnees['appreciation']; $add_appreciation= $doc->createElement('appreciation',$appreciation);
				$annee_publication = $donnees['annee_publication']; $add_annee_publication = $doc->createElement('annee_publication',$annee_publication);
				$nombre_page = $donnees['nombre_page']; $add_nombre_page = $doc->createElement('nombre_page',$nombre_page);

    $metadata1->appendChild($metadata2);
	$metadata2->appendChild($add_titre);
	$metadata2->appendChild($add_auteur);
	$metadata2->appendChild($add_appreciation);
        $metadata2->appendChild($metadata3);
		$metadata3->appendChild($add_annee_publication);
		$metadata3->appendChild($add_nombre_page);
}}}
			$nomxml = "test";
			$doc->save('xml/'.$nomxml.'.xml');



Voila le code, j'espère que vous y verrez plus clair que moi.
Tu génère un seul élément "livre" auquel tu ajoutes toutes tes données. Il faut que tu crées un élément "livre" pour chaque set de données décrivant un livre.

Il faut donc que tu déplaces la génération de tes éléments "livre" dans ta boucle while.
Si je comprends bien je déplace ceci :

$metadata2 = $doc->createElement('livre');


Pour le mettre dans mon while ?

$retour = mysql_query("SELECT * FROM livre_info WHERE id ='$idL'");
		while ($donnees = mysql_fetch_array($retour)){ 

$metadata2 = $doc->createElement('livre');

$titre  = $donnees['titre']; $add_titre = $doc->createElement('titre',$titre);


Car je viens d'essayer et j'ai toujours le même problème.
Autant pour moi, j'avais oublier de déplacer un deuxième élèments tout fonctionne.

Merci beaucoup Smiley jap