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 :

simpleXml et php


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Par défaut simpleXml et php
    Bonjour,

    Voici mon code xml :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    <?xml version="1.0"?>
    <personnes>
     
    <personne>
    <nom> jeanjean </nom>
    <prenom> pierre </prenom>
    <num_de_tel> 0201385446 </num_de_tel>
    <adresse> 1 ,rue hlm les villas 88320 lolo </adresse> 
    <email> jj@hotmail.fr </email>
    <categorie> ami </categorie>
    </personne>
    <personne>
    <nom> jiji </nom>
    <prenom> pol </prenom>
    <num_de_tel> 0329097557 </num_de_tel>
    <adresse> 6,rue fdsgf dfsd 32222 mpmp </adresse> 
    <email> bubu@hotmail.fr </email>
    <categorie> parent</categorie>
    </personne>
    <personne>
    <nom> koko </nom>
    <prenom> ppp </prenom>
    <num_de_tel> 0165489621 </num_de_tel>
    <adresse> 12 rue de sfilles 36000 jj  </adresse> 
    <email> sasa@hotmail.fr </email>
    <categorie> enseignant </categorie>
    </personne>
    <personne>
    <nom> vuvu </nom>
    <prenom> ss </prenom>
    <num_de_tel> 8732546941 </num_de_tel>
    <adresse> 65 fff des dd 41000 trtr  </adresse> 
    <email> greg@hotmail.fr </email>
    <categorie> ami </categorie>
    </personne>
    <personne>
    <nom> sasa </nom>
    <prenom> cece </prenom>
    <num_de_tel> 6425783214 </num_de_tel>
    <adresse> 65 rue de peuplier 20000 ss  </adresse> 
    <email> jeanjean@hotmail.fr </email>
    <categorie> parent </categorie>
    </personne>
    </personnes>

    et mon code php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    	$racine = simplexml_load_file('gregory.xml');
    	$personnes = $racine->personnes;
    	$personne= $personnes->personne[0];
    	// On recupere la premiere categorie dans le premier element personne
    	$categorie_0= $personne->categorie[0];
    	echo $categorie_0;
     
    ?>
    Il me met ça comme erreur : "Trying to get property of non-object" mon navigateur. Je suppose que j'affiche que la balise xml et non son contenu.
    Mais je n'arrive pas à afficher le contenu des balise xml.
    Je ne savais que le lien xml php était si difficile.
    Pouvez vous m'aider?
    Merci

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Il n'y a nul besoin de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $personnes = $racine->personnes;
    Car l'objet simplexml créé correspond à votre racine.

    Donc lorsque vous faites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $racine = simplexml_load_file('gregory.xml');
    $racine correspond à votre racine, l'élément personnes.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $personnes = simplexml_load_file('gregory.xml');
    $personne_0 = $personnes->personne[0];
    // On récupère la première catégorie dans le premier élément personne
    $categorie_0 = $personne_0->categorie[0];
    echo $categorie_0;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Par défaut
    D'accord j'avais pas compris ça pour l'element racine. Merci
    Maintenant je veux essayer de recuperer toute les categories de toutes les personnes.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    $personnes = simplexml_load_file('gregory.xml');
    $personne_0 = $personnes->personne;
    $categorie= $personne_0->categorie;
    // On récupère la première catégorie dans le premier élément personne
    $categorie_0 = $personne_0->categorie[0];
    echo $categorie_0, '<br/>';
    //recupere toute les categories des elements personnes
    foreach($personnes->personne as $personne){
    echo $categorie, '<br />';
    }
    ?>
    Pour se faire j'ai utilisé une boucle et il n'y a pas d'erreur quand je le lance avec easy php mais en fait il ne me renvoie qu'une catégorie "amie" pour les 5 personnes alors que ce n'est pas ça que j'ai mis dans mon fichier xml.
    Pourquoi ne me renvoie t-il pas les 2 autres catégories qui se trouve dans mon fichier ?
    Merci

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Parce qu'il faut le réaliser dans votre itération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $personnes = simplexml_load_file('gregory.xml');
    foreach ($personnes->personne as $personne) {
        printf("%s %s appartient à la catégorie %s<br />", $personne->nom, $personne->prenom, $personne->categorie);
    }
    Sinon, en l'état, vous désignez toujours la catégorie de la première personne.

    (on supposera le script enregistré en UTF-8 et que le client reconnaît le document comme tel)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Par défaut
    D'accord merci!

    Maintenant j'ai réussi a afficher tout mon contenu comme je le voulais!
    Mais j'aimerais pauser une condition comme par exemple afficher que les personnes dont la categorie=ami ou la personne qui s'appelle jeanjean.

    Le problème que j'ai rencontré, ressemble beaucoup au précédent car quand j'effectue mon if soit toutes mes categories se transforment en ami et il affiche tout.
    Soit ça n'affiche rien du tout.
    Pourtant je sélectionne bien la categorie "ami" avec le chemin qu'il faut je pense dans le if !??
    Pouvez vous m'aider??
    Merci

    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    $personnes = simplexml_load_file('gregory.xml');
    $personne= $personnes->personne;
    foreach ($personnes->personne as $personne) {
    if ($personne->categorie['ami']{
        echo "Nom:".$personne->nom, '<br/>', "Prénom:".$personne->prenom, '<br/>', "Numéro de tel:".$personne->num_de_tel, '<br/>', "Adresse:".$personne->adresse, '<br/>', "Email:".$personne->email, '<br/>', "Categorie:".$personne->categorie, '<br/>','<br/>', '<br/>' ;
    }
    }
    ?>

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Votre code n'est même pas syntaxiquement valide.

    Pour n'avoir que les amis, remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($personne->categorie['ami']{
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($personne->categorie == 'ami') {
    Pour n'avoir que jeanjean, par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($personne->nom == 'jeanjean') {
    Attention :
    • on suppose toujours ici le script enregistré en UTF-8 sinon les comparaisons pourront ne pas fonctionner (en présence de caractères accentués par exemple)
    • on suppose qu'il n'y a pas d'espaces superflus au niveau de vos valeurs comme c'est le cas dans votre exemple de document XML initial (sinon utiliser une fonction comme trim)

    A noter qu'il existe d'autres solutions (en passant par XPath notamment).

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/09/2014, 16h45
  2. simpleXml et php
    Par lol88 dans le forum Langage
    Réponses: 5
    Dernier message: 02/12/2009, 18h23
  3. [SimpleXML] Comment passer de XML à MySQL et vice-versa avec PHP ?
    Par Ben42 dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 05/12/2005, 21h42
  4. [SimpleXML] Comment faire pour transformer un fichier XML en PHP ?
    Par magic8392 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 23/09/2005, 16h22

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