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

Bibliothèques et frameworks PHP Discussion :

[XML] [EXPAT] Parseur PHP flux xml


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 16
    Points : 9
    Points
    9
    Par défaut [XML] [EXPAT] Parseur PHP flux xml
    Salut,

    Je rencontre un probleme pour récupérer les données d'un flux xml (un flux pour un livescore).
    Pour le parser, j'utilise un parser que j'ai trouvé sur le forum (celui de macbook) :
    http://www.developpez.net/forums/vie...ght=parser+php

    Pour afficher les données, j'utilise ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?
    foreach ($xml['sport'] as $value)
    {
    	if($value['name'] != ''){ // j'ai ajouté pour éviter l'affichage de ligne blanche...
    	echo 'Sport : '.$value['name'].' / Categorie : '.$value['category']['name'].' / Tournoi : '.$xml['tournament']['name'].' / Match : '.$xml['match']['matchdate'].' / Team 1 : '.$xml['match']['team1'].' / Team 2 : '.$xml['match']['team2'].'<br />';
    	}
    }
    ?>
    <pre><?php print_r($xml) ?></pre>
    Et j'obtiens ça :
    http://www.smcaen.com/test.html

    Je ne sais pas comment récupérer les données pour chaque sport / pays / division / rencontre.

    Les noms des différents sports s'affichent correctement... mais comment récupérer les autres données ?

    J'aimerais à terme que le livescore ait cette allure :
    http://betandwin.enetpulse.com (faites un copier/coller du lien dans votre navigateur sinon ça ne fonctionnera pas).

    Merci pour votre aide !

  2. #2
    Membre éprouvé Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Points : 1 009
    Points
    1 009
    Par défaut
    là c'est davantage un problème de manipulation de tableau que de parsage.

    Si tu n'es pas coutumier des tableaux multidimensionnels, commences par parcourir ton tableau avec un foreach, et de descendre petit à petit dans ton tableau en récupérant le nom des indices.
    Consultant idéaliste.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par macbook
    là c'est davantage un problème de manipulation de tableau que de parsage.

    Si tu n'es pas coutumier des tableaux multidimensionnels, commences par parcourir ton tableau avec un foreach, et de descendre petit à petit dans ton tableau en récupérant le nom des indices.
    Oui en effet ! Le problème, c'est que je ne sais pas faire ça :p Mais je ne demande qu'à apprendre

    Lorsque l'on fait un :
    foreach ($xml['sport'] as $value) {
    ...
    }
    Cela parcours les données du tableau jusqu'à ou ?

    Comment faire pour récupérer toutes les données de chaque catégorie ?
    Je ne sais pas comment m'y prendre.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 60
    Points : 54
    Points
    54
    Par défaut
    salut Samuel

    foreach permet de parcourir les elements d'un seul tableau.
    toi, tu possède, un tableau dans un tableau dans un tableau dans un tableau.

    tu doit donc faire un foreach dans un foreach dans un foreach.

    n'oubli pas que print_r est ton amis[code]<?php
    echo '<pre>'.htmlentities(print_r($xml,true)).'</pre>';

    abuse-en, tu risque de trouver la solution tout seul...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Je viens de comprendre le principe des tableaux multidimensionnels. En tout cas, je sais comment récupérer telle ou telle valeur .

    Exemple pour le premier enregistrement, du premier sport, de la première catégorie, de la première division, du premier match :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(!empty($xml['sport'][0]['name']))
    {
    echo 'Sport (sport id :'.$xml['sport'][0]['attributes']['mssportid'].') : '.$xml['sport'][0]['name'].' / ';
    echo 'Categorie (categorie id : '.$xml['sport'][0]['category'][0]['attributes']['mscategoryid'].') : '.$xml['sport'][0]['category'][0]['name'].' / ';
    echo 'Division (division id : '.$xml['sport'][0]['category'][0]['tournament']['attributes']['mstournamentid'].') : '.$xml['sport'][0]['category'][0]['tournament']['name'].' / ';
    echo 'Match (le '.$xml['sport'][0]['category'][0]['tournament']['match']['matchdate'].') : '.$xml['sport'][0]['category'][0]['tournament']['match']['team1'].' vs '.$xml['sport'][0]['category'][0]['tournament']['match']['team2'].'';
    }
    Maintenant, il faut que je trouve un moyen d'afficher toutes les valeurs pour chaque tableau. J'ai essayé un foreach dans un autre foreach, mais j'ai un message d'erreur :

    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
    $i=0;
    foreach ($xml['sport'] as $value)
    {
    	if(!empty($xml['sport'][$i]['name']))
    	{
    	echo 'Sport (sport id :'.$xml['sport'][$i]['attributes']['mssportid'].') : '.$xml['sport'][$i]['name'].'<br />';
    
    
    	$j=0;
    	foreach ($xml['category'][$i] as $category)
    	{
    	echo 'Categorie (categorie id : '.$xml['sport'][$i]['category'][$j]['attributes']['mscategoryid'].') : '.$xml['sport'][$i]['category'][$j]['name'].'<br />';
    	echo 'Division (division id : '.$xml['sport'][$i]['category'][$j]['tournament']['attributes']['mstournamentid'].') : '.$xml['sport'][$i]['category'][$j]['tournament']['name'].'<br />';
    	echo 'Match (le '.$xml['sport'][$i]['category'][$j]['tournament']['match']['matchdate'].') : '.$xml['sport'][$i]['category'][$j]['tournament']['match']['team1'].' vs '.$xml['sport'][$i]['category'][$j]['tournament']['match']['team2'].'<br /><br />';
    	$j++;
    	} // fin du foreach category
    
    	} // fin du if
    $i++;
    }
    La liste des différents sports s'affiche bien, mais j'ai cette erreur qui s'affiche au niveau de la ligne du second foreach.
    J'ai essayé avec foreach ($xml['category'] as $category) sans le [$i] mais ca ne change rien. (PS : je n'ai pas remplacé les valeurs du foreach dans le code... je le ferai après).

    Erreur :
    Warning: Invalid argument supplied for foreach() in c:\program files\easyphp1-8\www\test.php on line 174
    (la ligne que j'ai indiqué en rouge).

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Bon, j'ai réussi à ne plus avoir l'erreur.
    J'arrive à afficher les différents sports... maintenant j'essai d'afficher les différentes "category" pour chaque sport, mais je n'y arrive pas

    mon code actuel :

    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
    $i=0;
     
    foreach ($xml['sport'] as $value)
    {
    	if(!empty($xml['sport'][$i]['name']))
    	{
    	echo 'Sport (sport id :'.$xml['sport'][$i]['attributes']['mssportid'].') : '.$xml['sport'][$i]['name'].'<br />';
     
    		$j=0;
    		foreach ($xml['sport'][$i]['category'] as $category) // j'ai repris la meme structure que pour le 1er foreach
    		{
    		echo ''.$xml['sport'][$i]['category'][$j]['name'].'<br />'; // c'est là que ca coince.
    		}
    		$j++;
    	}
     
    $i++;
    }
    Au niveau de la ligne :
    echo ''.$xml['sport'][$i]['category'][$j]['name'].'<br />';

    Je ne sais pas comment employer les valeurs définies dans le tableau qui sont générées en php. J'utilise $i et $j, mais ca ne fonctionne pas. Il me retourne toujours la meme valeur :
    Code X : 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
    Sport (sport id :1) : Soccer
    Czech
    Czech
    Czech
    Czech
    Czech
    Czech
    Czech
    Czech
    Czech
    Czech
    Czech
    Czech
    Czech
    Czech
    Czech
    Czech

    Au niveau du deuxième foreach, seriez vous comment faire en sorte qu'il utiliser les bonne valeurs ? comme ça il affichera les noms de chaque catégorie.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 60
    Points : 54
    Points
    54
    Par défaut
    bah oui mais non

    un fois que tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    foreach ($xml['sport'] as $value)
    ?>
    c'est $value qui contient tout nouveau tableau

    donc ton foreach suivant sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    foreach($value['category'][$i] as $category)
    ?>
    A adapter bien sur.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Je viens de remplacer le $xml['sport'] par $value dans tout le code, et ça affiche une notice au lieu des données :

    Notice: Undefined offset: 0 in c:\program files\easyphp1-8\www\test.php on line 171
    Notice: Undefined offset: 1 in c:\program files\easyphp1-8\www\test.php on line 171
    etc...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Code pour tester l'affichage la liste des sports :
    $i=0;
     
    foreach ($xml['sport'] as $value)
    {
    	if(!empty($value[$i]['name']))
    	{
    	echo ''.$value[$i]['name'].'<br />';
    	}
     
    $i++;
    }
    J'ai pourtant bien remplacé comme il le fallait, mais ca fonctionne plus du tout. C'est pour cela que je n'utilisais pas $value ! :p

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 60
    Points : 54
    Points
    54
    Par défaut
    essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    echo '<pre>'.htmlentities(print_r($value,true)).'</pre>';
    ?>
    alors ! pour savoir ou tu en est.

    si tu souhaite utiliser $xml dans tout tes foreach (pratique pour modier les valeurs) je te conseil d'extraire aussi les cléfs dans le foreach.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Lorsque je fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    echo '<pre>'.htmlentities(print_r($value,true)).'</pre>';
    ?>
    Cela m'affiche :
    Code X : 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
    Array
    (
        [category] => Array
            (
                [tournament] => Array
                    (
                        [match] => Array
                            (
                                [0] => 
                            )
    
                    )
    
            )
    
    )

    C'est normal qu'il n'y ait aucune données ?

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Ca y est j'ai réussi à utiliser la valeur $value => $xml['sport'] .

    J'en suis à ce stade :
    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
    foreach ($xml['sport'] as $value)
    {
    	if(!empty($value['attributes']['mssportid']))
    	{
    	echo 'Sport (sport id :'.$value['attributes']['mssportid'].') : '.$value['name'].'<br />';
     
    		foreach ($value['category'] as $category)
    		{
    			if(!empty($category['attributes']['mscategoryid']))
    			{
    			echo 'Pays (id pays :'.$category['attributes']['mscategoryid'].')'.$category['name'].'<br />';
     
    				foreach ($category['tournament'] as $tournament)
    				{
    					if(!empty($tournament['attributes']['mstournamentid']))
    					{
    					echo 'Division (id division :'.$tournament['attributes']['mstournamentid'].')'.$tournament['name'].'<br />';
    					}	
    				}
     
    			}	
    		}
    		echo '<br />';
    	}
    }
    Et le script m'affiche :
    Code X : 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
    28
    29
    30
    31
    32
    33
    34
    35
    Sport (sport id :1) : Soccer
    Pays (id pays :18)Czech
    Pays (id pays :1)England
    Pays (id pays :7)France
    Pays (id pays :30)Germany
    Division (id division :44)Regionalliga North
    Pays (id pays :67)Greece
    Pays (id pays :51)Ireland
    Pays (id pays :31)Italy
    Division (id division :88)Serie C1B
    Pays (id pays :12)Mexico
    Pays (id pays :44)Portugal
    Pays (id pays :21)Russia
    Pays (id pays :23)Slovakia
    Pays (id pays :46)Turkey
    
    Sport (sport id :2) : Basketball
    Pays (id pays :15)USA
    
    Sport (sport id :4) : Ice Hockey
    Pays (id pays :40)Finland
    Division (id division :126)Mestis
    Pays (id pays :38)Norway
    Pays (id pays :98)Slovakia
    Pays (id pays :39)Sweden
    Pays (id pays :54)Switzerland
    Division (id division :2976)NLA Playout
    Pays (id pays :37)USA
    
    Sport (sport id :5) : Tennis
    Pays (id pays :6)WTA
    
    Sport (sport id :6) : Handball
    
    Sport (sport id :7) : Floorball

    Le script n'affiche pas le nom des pays pour le handball et le floorball... il n'affiche pas non plus toutes les divisions pour chaque pays...

    Je ne comprends pas/plus... pourquoi ca ne fonctionne pas !
    Je pense avoir tout fait comme il le fallait... foreach dans foreach dans foreach :p


Discussions similaires

  1. Parseur de flux xml
    Par missmiss89 dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 15/07/2011, 10h59
  2. Parseur de flux xml (en php)
    Par missmiss89 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 07/07/2011, 21h01
  3. Parseur de flux xml (en php)
    Par missmiss89 dans le forum Langage
    Réponses: 1
    Dernier message: 07/07/2011, 17h22
  4. parseur de flux rss
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/04/2009, 10h14
  5. [XML] [EXPAT] Parseur xml pour PHP 4.3.10
    Par hakim11 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 20/10/2007, 15h09

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