Fichier xml => tableau associatif

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 140 fois - Téléchargée 16 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

webdeb
Messages postés
509
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
31 mars 2009
2 -
Et si j'ai des attributs dans mes tags ?
durealex
Messages postés
23
Date d'inscription
vendredi 20 juillet 2007
Statut
Membre
Dernière intervention
26 août 2008
-
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 :)
webdeb
Messages postés
509
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
31 mars 2009
2 -
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é :)

++
cs_gege217
Messages postés
40
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
13 août 2008
-
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
509
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
31 mars 2009
2 -
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.

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)