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 :

clé de tableau avec @


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Par défaut clé de tableau avec @
    Bonjour,
    Je me gratte sérieusement la tête depuis un bon moment alors je demande aux spécialistes

    Je charge un XML et je traite chaque enregistrement pour affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $xmlresult = simplexml_load_file("http://www.musicbrainz.org/ws/2/artist/?query=artist:".urlencode($from_db['prenom']).'%20'.urlencode($from_db['nom']));
    foreach ($xmlresult->{'artist-list'}->artist as $xmla){
    	echo "<p><b>{$xmla->name}</b> - type {$xmla->@attributes->type} - pays {$xmla->country}</p>";
    }
    Sachant qu'un print_r sur un $xmla donne bien la partie des données que je veux :
    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
    SimpleXMLElement Object
    (
        [@attributes] => Array
            (
                [type] => Person
                [id] => 93db2174-33e4-4efa-8ae8-d51675d0b97f
            )
        [name] => James Talk
        [sort-name] => Talk, James
        [gender] => male
        [country] => GB
        [life-span] => SimpleXMLElement Object
            (
                [ended] => false
            )
        [alias-list] => SimpleXMLElement Object
            (
                [alias] => J Talk
            )
    )
    Je n'arrive pas à accéder aux attributs car je ne trouve pas la bonne syntaxe pour appeler le noeud '@attributs', le @ me fait des erreurs (dans l'écriture ci-dessus), ou si je veux écrire $xmla->{'@attributes'} ça ne va pas non plus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print_r($xmla->{'@attributes'});
    me donne "SimpleXMLElement Object ( )" comme s'il était vide.
    J'ai beau échapper, enlever le @... j'y arrive pas

    Merci pour vos lumières !

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    pour accéder aux attributs, ils faut faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach($xmla as $node) {
        foreach($node->attributes() as $k => $v) {
            // ton traitement ici
        }
    }

  3. #3
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Par défaut
    Salut,
    J'avais bien vu passer cet appel, mais ça oblige à faire un foreach pour créer de nouvelles variables pour des valeurs déjà contenues dans l'objet XML sous forme d'un sous-tableau de clé @attributs.
    Je ne vois pas de bonne raison pour empêcher d'y accéder directement comme tout autre élément du noeud.

    Si c'est le seul moyen, j'ajoute donc des lignes et des variables intermédiaires qui me semblaient superflues.
    Ca ressemble donc à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $xmlresult = simplexml_load_file("http://www.musicbrainz.org/ws/2/artist/?query=artist:".urlencode($from_db['prenom']).'%20'.urlencode($from_db['nom']));
    foreach ($xmlresult->{'artist-list'}->artist as $xmla){
    	$attr = array();
    	foreach($xmla->attributes() as $k=>$v) $attr[$k] = $v;
    	echo "<p><b>{$xmla->name}</b> - type $attr[type] - pays {$xmla->country}</p>";
    }
    Merci bien pour la réponse.

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par Titum Voir le message
    Salut,
    J'avais bien vu passer cet appel, mais ça oblige à faire un foreach pour créer de nouvelles variables pour des valeurs déjà contenues dans l'objet XML sous forme d'un sous-tableau de clé @attributs.
    Je ne vois pas de bonne raison pour empêcher d'y accéder directement comme tout autre élément du noeud.
    La raison est très simple selon la doc :
    SimpleXML ajoute des propriétés itératives pour presque toutes ses méthodes. Celles-ci ne peuvent être vues en utilisant var_dump() ou tout autre fonction qui examine les objets.
    En gros, presque tout ce que tu manipules avec simple_xml renvoie un objet traversable et non un tableau.

  5. #5
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Par défaut
    ah.
    Comme c'était bien affiché avec un print_r() je ne voyais pas de problème.

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

Discussions similaires

  1. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 04/05/2015, 00h29
  2. tableau avec 1 colonne sur 3 sans cadre
    Par brasco06 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 21/04/2005, 18h44
  3. balise <img> dans un tableau avec firefox
    Par yannock dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 25/10/2004, 17h44
  4. pb de coord de tex dans tableau avec multitex
    Par sebh dans le forum OpenGL
    Réponses: 3
    Dernier message: 25/01/2004, 22h36
  5. Réponses: 13
    Dernier message: 14/10/2003, 15h31

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