Fichier xml => tableau associatif

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 242 fois - Téléchargée 18 fois

Contenu du snippet

Tous petit bout de code qui lit un fichier .xml et qui le stock dans un tableau de tableau associatif.
Cela ma servis par exemple pour pouvoir importer une liste de produits avec leurs descriptif.
Le tableau en question est $tab_immo.
La fonction main est read_xml().
Dans la fonction search_occurence() remplacer AFF_ID par votre le nom de votre 1ere balise.
exemple du fichier xml:

<BIEN>
<AFF_ID>01</AFF_ID>
<TypeBien>blabla</TypeBien>
<Categorie>blabla</Categorie>
<Commentaires>blabla
blabla</Commentaires>
</BIEN>
<BIEN>
<AFF_ID>02</AFF_ID>
<TypeBien>blabla</TypeBien>
<Categorie>blabla</Categorie>
<Commentaires>blabla
blabla</Commentaires>
</BIEN>

Source / Exemple :


<?
$fichier = "Liste.xml";
$tab_immo = array(array());
$i = -1;

read_xml($fichier);

function fonctionBaliseOuvrante($parseur, $nomBalise, $tableauAttributs)
{
  global $derniereBaliseRencontree;

  $derniereBaliseRencontree = $nomBalise;
}

function fonctionBaliseFermante($parseur, $nomBalise)
{
  global $derniereBaliseRencontree;

  $derniereBaliseRencontree = "";
}

function search_occurence($parseur, $texte)
{
  global $derniereBaliseRencontree;
  global $tab_immo;
  global $i;

  $texte = utf8_decode($texte);
  if ($derniereBaliseRencontree == "AFF_ID")
    $i++;
  $tab_immo[$i][$derniereBaliseRencontree] .= $texte;
}

function read_xml($fichier)
{
  global $tab_immo;

  $parseurXML = xml_parser_create();
  xml_set_element_handler($parseurXML, "fonctionBaliseOuvrante"
                          , "fonctionBaliseFermante");
  xml_set_character_data_handler($parseurXML, "search_occurence");
  $fp = fopen($fichier, "r");
  if (!$fp) die("Vous n'avez pas uploader de fichier XML");
  while ( $ligneXML = fgets($fp, 1024)) {
    xml_parse($parseurXML, $ligneXML, feof($fp)) or
      die("Erreur XML");
  }
  xml_parser_free($parseurXML);
  fclose($fp);
  //unlink($fichier);
  //foreach($tab_immo[0] as $value)
    //echo $value . "<br>";
}

?>

Conclusion :


Voila j'espere ca peut vous être utile.
A la fin mon unlink me servait à supprimer le fichier, car il était importé via un formulaire d'upload.
Bon code

A voir également

Ajouter un commentaire Commentaires
durealex Messages postés 23 Date d'inscription vendredi 20 juillet 2007 Statut Membre Dernière intervention 26 août 2008
13 août 2008 à 15:09
J'avoue que c'est un de mes default, et je vous montre pas ma premiere version ou j'ai utilisé aucune fonction xml. Mais un gentil monsieur ma dit que ca existé alors je me suis jeter sur les premières que j'ai trouvé.
Mais je vais lire avec plaisir le man de SimpleXML, merci à vous :)
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
13 août 2008 à 10:59
Oui il y'a SimpleXML mais actuellement la classe que j'ai schématisée dans mon commentaire est en PHP 4. Je l'ai développée au bureau pour un projet client en PHP 4. Mais c'est clair que durealex aurait du se pencher tout de suite sur SimpleXML plutôt que de réinventer la roue.
cs_gege217 Messages postés 40 Date d'inscription jeudi 23 janvier 2003 Statut Membre Dernière intervention 13 août 2008
13 août 2008 à 09:41
Hello,

Sinon y'a un truc encore beaucoup plus simple, c'est l'extension simpleXML.

http://fr2.php.net4/manual/fr/book.simplexml.php

"L'extension SimpleXML fournit des outils très simples et faciles à utiliser pour convertir du XML en un objet qui peut être manipulé avec ses propriétés et les itérateurs de tableaux."

Les exemples qui expliquent comment c'est ultra simple d'utilisation sont là http://fr2.php.net/manual/fr/simplexml.examples.php
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
12 août 2008 à 10:05
Salut,

Personnellement, au bureau je me suis créé une classe PHP me permettant de me faciliter la lecture de fichiers XML. Pour cela, j'utilise XPath qui est un langage permettant de naviguer dans un fichier XML. En retour, je reçois un tableau associatif qui me représente le noeud (ainsi que tous ses fils) sur lequel je me suis arrêté. Ce qui donne par exemple :

<?php

$o = new XMLFinder('mon_fichier.xml');
// Je recherche tous les noeuds <root><nodeA><nodeAB prenom="toto">
// Je récupère un tableau associatif avec les attributs et contenus texte de chaque noeud
$a = $o->xpath('/root/nodeA/nodeAB[@prenom="toto"]');
// Je ne veux que le contenu d'un noeud
$a = $o->xpath('/root/nodeA/nodeAB[@prenom="toto"]', XMLFinder::CONTENT);
// Je ne veux que les attributs d'un noeud
$a = $o->xpath('/root/nodeA/nodeAB[@prenom="toto"]', XMLFinder::ATTRIBUTES);
?>

Globalement ça ressemble à ça. Ca me permet de gagner beaucoup de temps et de la flexibilité :)

++
durealex Messages postés 23 Date d'inscription vendredi 20 juillet 2007 Statut Membre Dernière intervention 26 août 2008
12 août 2008 à 09:42
C'est comme si ils existaient pas. C'est vrai que dans mon cas je n'en n'avais pas besoins. Mais c'est une idée mais cela viendrai à faire un array(array(array())) du bonheur en perspective :)
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (durealex)