IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

DomDocument extraire des données du fichier XML


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de Mika2008
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 176
    Points : 71
    Points
    71
    Par défaut DomDocument extraire des données du fichier XML
    Bonjour,

    voila je dispose d'un flux de ce genre :


    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <FLUX>
    <ENTETE>
    	<Nom>Dockdupont</Nom>
    	<Prenom>Charle</Prenom>
    	<personne>
    		<Nom>Zidane</Nom>
    		<Prenom>Zinedine</Prenom>
    	</personne>
    </ENTETE>
    <ENTETE>
    	<Nom>BeckDupont</Nom>
    	<Prenom>JeanEdourd</Prenom>
    	<personne>
    		<Nom>Messi</Nom>
    		<Prenom>Maurice</Prenom>
    	</personne>
    </ENTETE>
     
    </FLUX>

    j'aimerais récupérer le nom et prénom de toute les personnes présente dans les balises personne et ne pas récupéré celle qui sont dans ENTETE.NOM


    j'utilise le code suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $nomFic = "personne.xml"; 
     
      $dom = new DomDocument;
      $dom->load($nomFic);
      $listeNom = $dom->getElementsByTagName('nom');
    ensuite je me récupère cette info dans un array :

    en utilisant ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $coordonnees = array ('nom' => '', 'prenom' => "");
     
     
    $cpt =  0;
     
      foreach($listeNom as $nom){
      	//echo $nom->firstChild->nodeValue . "<br />"; // affiche la valeur de la balise
    	$coordonnees[$cpt]['nom'] = $nom->firstChild->nodeValue; // enregistre la valeur de la balise dans un tableaux
    	$cpt = $cpt + 1; // nous donne le nombre de fichier pdf enregistrer dans le tableaux
      }
    le probléme c'est que ça me récupérer tout les noms et prénoms du flux, or je ne veux pas ceux qui sont après l’entête mais uniquement ceux présent dans personne?

    comme faire ce filtre svp ?

  2. #2
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Salut,

    Tu peut faire ca avec xpath :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $xml = simplexml_load_file($nomFic);
    foreach ($xml->xpath('ENTETE/personne') as $personne) {
        echo $personne->Nom . ' - ' . $personne->Prenom . '<br/>';
    }

  3. #3
    Membre régulier Avatar de Mika2008
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 176
    Points : 71
    Points
    71
    Par défaut
    Merci ça semble fonctionne je vais me pencher sur cette solution, sinon j'avais trouvé la solution suivante, mais il y a un bug au niveau de la récupération de l'item sur un getElementsByTagName

    voici mes deux fonctions :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    function getDatasDomsByForeach($strings)
    {
     
    	foreach($strings as $var){
     
        	if ($var->hasAttribute("null")) {
    	    	return "";
    	    }else return  $var->firstChild->nodeValue;
      }
     
    }
     
      function getInfoDom($dom, $cpt){
      	  	echo "cpt = ".$cpt.'<br>';
     
     
      $personne= $dom->getElementsByTagName('personne')->item(($cpt));  
      $listNomPergrc = $pergrc->getElementsByTagName("nom");
      $listPrenomPergrc = $pergrc->getElementsByTagName("prenom");
     
     
    $coordonnees[$cpt]['nom'] = getDatasDomsByForeach($listNomPergrc);
    $coordonnees[$cpt]['prenom'] = getDatasDomsByForeach($listPrenomPergrc);
     
    	return $coordonnees;
     
       };
    et pour utiliser les fonctions je procédé ainsi :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $nomFic = "exemple1.xml"; 
     
      $dom = new DomDocument;
      $dom->load($nomFic);
     
      echo "Nom du flux = ".$nomFic."<br>";
     
     
    	for ($i=0; $i <=4 ; $i++) {
     
    		$coordonnees[$i] = getInfoDom($dom, $i);	
    	}
    le probléme c'est que j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to a member function getElementsByTagName() on a non-object in /var/www/Projet_01/index.php on line 25

    qu'en pensez vous svp ?

  4. #4
    Membre régulier Avatar de Mika2008
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 176
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par amoiraud Voir le message
    Salut,

    Tu peut faire ca avec xpath :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $xml = simplexml_load_file($nomFic);
    foreach ($xml->xpath('ENTETE/personne') as $personne) {
        echo $personne->Nom . ' - ' . $personne->Prenom . '<br/>';
    }
    Bonjour,

    merci pour votre solution, qui fonctionne parfaitement et qui est largemetn plus rapide à s'exécuté.

    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Importer en Excel des données d’un fichier XML
    Par luca.donati dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 11/11/2010, 02h16
  2. Réponses: 6
    Dernier message: 21/04/2010, 14h27
  3. Réponses: 8
    Dernier message: 06/03/2008, 16h32
  4. Inserer des données dans fichier Xml
    Par Logarythme dans le forum InfoPath
    Réponses: 3
    Dernier message: 28/02/2008, 08h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo