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 :

[SimpleXML] Comment traiter correctement simple XML avec du PHP ?


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut [SimpleXML] Comment traiter correctement simple XML avec du PHP ?
    Bonsoir,
    excusez moi, je bute sur un petit problème.
    J'essaie de lire un menus d'un fichier XML via PHP
    J'arrive à afficher le menu de cette façon déjà:
    menu 1
    menu2
    etc. En faisant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    $menus = simplexml_load_file('individu.xml'); 
     
    foreach($menus->menu as $menu) 
     {
     echo '<a href = "'.$menu->lien.'">'.$menu->nomlien.'</a><br />';
     }
    ?>
    Ce que j'aimerais faire et que je n'arrive pas est :
    Menus principal
    menu 1
    menu 2

    Menus Secondaire
    menu a
    menu b

    Voici le fichier 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
    <?xml version="1.0" encoding="iso-8859-1"?>
    <menus> 
     
    <rubriques>
    <rubrique>Formation</rubrique>
    <menu>
    <nomlien>Presentation</nomlien>
    <lien>http://monsite.com/presentation.php</lien>
    </menu>
     
    <menu>
    <nomlien>Cours et tarifs</nomlien>
    <lien>http://monsite.com/tarif.php</lien>
    </menu>
     
    <menu>
    <nomlien>Professeurs</nomlien>
    <lien>http://monsite.com/installation.php</lien>
    </menu>
     
    </rubriques>
     
    <rubriques>
    <rubrique>Emploi</rubrique>
    <menu>
    <nomlien>Presentation</nomlien>
    <lien>http://monsite.com/presentation-emploi.php</lien>
    </menu>
     
    <menu>
    <nomlien>Entreprises</nomlien>
    <lien>http://monsite.com/entreprise.php</lien>
    </menu>
     
    </rubriques>
     
    </menus>
    D'avance je vous remercie beaucoup pour votre aide

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Bonjour, un bon truc pour s'y retrouver est d'utiliser la fonction var_dump();

    Ce que je fais régulièrement, ce qui m'a permis de faire le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $xml = simplexml_load_file('individu.xml');
    foreach($xml as $rubrique) {
        echo "<h1>".$rubrique->rubrique."</h1><br />";
     
        foreach ($rubrique->menu as $menu) {
            echo '<a href = "'.$menu->lien.'">'.$menu->nomlien.'</a><br />';       
        }
     
    }

  3. #3
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut Comment faire l'inverse : écrire dans le fichier XML ?
    Merci beaucoup MaitrePylos pour ce code que tu m'as fait.
    Le code marche parfaitement et je suis hyper content.
    Avant de mettre résolu, j'ai une dernière question. Les informations du fichier XML proviennent d'une table myql dont voici la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php $requete = "SELECT * FROM matable ORDER BY IDT ASC";
    $req = mysql_query($requete);
    while ($myRow = mysql_fetch_assoc($req)){
    $rubrique = $myRow['rubrique'];
    $nomlien = $myRow['nomlien'];
    $lien = $myRow['lien']; 
    }
    ?>
    Comment écrire ces données dans le fichier xml (individu.xml). En supposant que le fichier était vide au départ ?

    Merci beaucoup pour ton aide.

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Heu tu dois faire quelque chose dans le genre(a vérifier et corriger)
    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
     
    //créer fichier xml
    $file = fopen('individu.xml',"w");
    $texte = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n<menus></menus>";
    //on écrit dans le fichier
    fwrite($file,$texte);
    //on ferme le fichier
    fclose($file);
     
    //on ouvre le fichier avec simplexml
    $xml = simplexml_load_file('individu.xml');
     
    //on passe la requête
    $rubrique = null;
     
    $requete = "SELECT * FROM matable ORDER BY IDT ASC";
    $req = mysql_query($requete);
    while ($myRow = mysql_fetch_assoc($req)) {
        if($myRow['rubrique'] != $rubrique) {
            $rubrique = $myRow['rubrique'];
            $rubriques = $xml->rubriques->addChild('rubrique');
            $rubriques->rubrique = $rubrique;
        }
        $menu = $rubriques->addChild('menu');
        $menu->nomlien = $myRow['nomlien'];
        $menu->lien = $myRow['lien'];
     
    }
    $xml->asXML('individu.xml');

    maintenant su tu as accès à la db, ceci est bien plus facile à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $requete = "SELECT * FROM matable ORDER BY IDT ASC";
    $rubrique = null;
    $req = mysql_query($requete);
    while ($myRow = mysql_fetch_assoc($req)) {
        if($myRow['rubrique'] != $rubrique) {
            $rubrique = $myRow['rubrique'];
            echo "<h1>".$rubrique->rubrique."</h1><br />";
     
        }
        echo '<a href = "'.$myRow['lien'].'">'.$myRow['nomlien'].'</a><br />';       
    }

  5. #5
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    wawoooh

    Merci mille fois. Très classe ton code. Non seulement il fonctionne parfaitement mais en plus j'ai compris

    Merci beaucoup. Oui effectivement je vais opter pour la base de données. Et je prendrai le fichier xml pour les paramètres du site comme :

    Url du site
    email
    site_visite_au_public = 'yes';

    Est-ce un bon choix de stocker ces données qui seront obligatoirement chargées à l'appel de chaque page du site. Ou il y a il autre chose qui est mieux comme fichier.ini ? que me conseilles-tu

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    .ini .xml même combats, tu ne devrais aps voir de différence entre les deux, perso j'ai une préférence pour le XML mieux structuré, mais le ini est pus facile à géré

  7. #7
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Merci beaucoup pour toutes les informations que tu m'as données et surtout pour ta gentillesse.

    Vue que ceux ne sont que des paramètres du site que je voudrais stocker, je vais utiliser le .ini pour le faire. Je vais chercher des informations à ce sujet.

    Bonne journée

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

Discussions similaires

  1. lire et traiter un fichier XML avec XMLDOM
    Par Phiss dans le forum ASP
    Réponses: 14
    Dernier message: 13/02/2007, 16h47
  2. [DOM] Comment generer ce fichier XML avec DOM ?
    Par jlassira dans le forum Format d'échange (XML, JSON...)
    Réponses: 18
    Dernier message: 10/04/2006, 09h12
  3. comment ouvrir un fichier XML avec excel
    Par ALCINA dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 24/03/2006, 14h42
  4. [XML] Comment parser ce fichier XML avec java !
    Par jlassira dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 13/03/2006, 12h56
  5. [C#] Comment récuper un page xml avec une URL
    Par pc152 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/02/2005, 16h17

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