begin process at 2012 05 27 20:13:12
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Xml

 > FICHIER XML => TABLEAU ASSOCIATIF

FICHIER XML => TABLEAU ASSOCIATIF


 Information sur la source



 Description

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

  • <?
  • $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>";
  • }
  • ?>
<?
$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


 Sources du même auteur

FILTRE POUR NEWSLETTERS GMAIL

 Sources de la même categorie

Source avec Zip JEU FRISE CHRONOLOGIQUE EN XML par mldvb
OBTENIR LES TAUX DE CHANGE DU JOUR EN EUROS par oallais
Source avec Zip AFFICHER LES FILM EN SALLE par slhuilli
Source avec Zip Source avec une capture MINI-PROCESSEUR XPROC (PIPELINE XML) par ordiman85
Source avec Zip Source avec une capture XML MAPPING TO CLASS OBJECTS / CHARGEMENT / PARSING / MODIFI... par aKheNathOn

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture PAGINATION JAVASCRIPT PHP MYSQL par cod57
CRÉER UN PARSEUR LL par Morphinof
FONCTION RECURSIVE DE DOSSIERS par tefa24600
Source avec Zip PILE/PARSEUR/LEXER/TOKENS par coucou747
Source avec Zip XML ET TABLEAUX : UNE CLASSE COMPLÈTE QUI CONVERTIT UN DOCUM... par DaCodeManiak

Commentaires et avis

Commentaire de webdeb le 11/08/2008 16:11:29

Et si j'ai des attributs dans mes tags ?

Commentaire de durealex le 12/08/2008 09:42:39

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 :)

Commentaire de webdeb le 12/08/2008 10:05: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é :)

++

Commentaire de gege217 le 13/08/2008 09:41:49

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

Commentaire de webdeb le 13/08/2008 10:59:04

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.

Commentaire de durealex le 13/08/2008 15:09:59

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 :)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

tableau associatif [ par tobleronne ] Bonjour,Je souhaite renseigner un tableau a plusieurs dimensions mais rien n'y fait ?!?J'ai une boucle qui alimenterais un tableau du style : $monTabl Tableau associatif [ par vbtom ] Bonjour je souhaite:Jaimerai faire un tableau qui ressemble a ceciN° | Nom_fichier | Taille_fichier | Date_fichier1 | Lala.gif | 124 Parser un tableau HTML pour en récupérer les valeurs [TITRE MODERE CAR PEU EXPLICITE] [ par Deconnexion ] Lut allAlors je demande votre aide pour r&#233;cup&#233;rer un tableau afin de le trait&#233;....Caract&#233;ristique du tableau, avoir 16 lignes et u Retourner la position d'une clé d'un tableau associatif [ par mentral ] BonjourQuestion certainement conne s'il en est mais j'ai d&#251; louper une fonction de base : comment trouver la position d'une cl&#233; dans un tabl première valeur d'un tableau associatif ? [ par hakeem69 ] Bonjour, Je vousdrais SVP connaître la fonction (si elle existe) qui permet trouver la 1ere valeur d'un tableau tableau associatif ? [ par nino69 ] Bonjour,J'ai une variable php:1)&nbsp;&nbsp;&nbsp;$nom_photo;Qui contient le nom d'un fichier jpg (exemple: photo05.jpg)j'ai un tableau qui contient u Au secours : comment parser un fichier xml et inserer a la volé dans une base mysql [ par deblok83 ] Bonjour, &nbsp;&nbsp;&nbsp; c'est mon premier post ici alors je me permet de me presenter je suis le webmaster de deblok83.com . j'ai un petit proble probleme avec tableau associatif [ par arginine ] Bonjour, J'ai un probleme relativement stupide pour "construire" un tableau associatif avec plusieurs colonnes: &lt;? // exemple$tab = array( "fichier aide parcourir un tableau [ par HaZeRtY55 ] Bonjour et bonne année a tous. Je débute en PHP, j'ai crée un tableau associatif un peu spécial, avec double tableau associatif du style: $tableau= a Parseur Xml StAX [ par anisis ] Bonjour tt le monde,En fait mon prblm c'est que je reçois des fichiers xml de grandes tailles et je dois les parser , Maintenant je suis entrain d'uti


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales