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 :

[DOM XML] Un souci avec un script


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 233
    Par défaut [DOM XML] Un souci avec un script
    salut,

    Le code ci dessous je l'ai copié du web

    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
    46
    47
    48
    49
    50
    51
    52
    53
    <?php
    
    <xml version="1.0" encoding="ISO-8859-1">
    <XML_EXEMPLE>
      <profil>
      	<id>200</id>
      	<prenom>Koogi</prenom>
      </profil>
      <profil>
      	<id>300</id>
      	<prenom>PSAS</prenom>
      </profil>
    </XML_EXEMPLE>
    
    <?
    // FONCTION qui va lire le fichier XML et le placer dans un tableau
    // Cette fonction sert de parseur
    
    function lit_xml($fichier,$item,$champs) {
       // on lit le fichier
       if($chaine = @implode("",@file($fichier))) {
          // on explode sur <item>
          // Dans l'exemple il s'agit de 'profil'
          $tmp = preg_split("/<\/?".$item.">/",$chaine);
          // pour chaque <item> donc tous les profils
          for($i=1;$i<sizeof($tmp)-1;$i+=2)
             // on lit les champs demandés <champ> donc il s'agit de 'id' et 'prenom'
             foreach($champs as $champ) {
                $tmp2 = preg_split("/<\/?".$champ.">/",$tmp[$i]);
                // on ajoute l'élément au tableau
                $tmp3[$i-1][] = @$tmp2[1];
             }
          // et on retourne le tableau dans la fonction
          return $tmp3;
       }
    }
    
    // Lecture du FLUX XML sur le serveur
    $xml = lit_xml("http://www.site.com/flux.xml","profil",array("id","prenom"));
    
    // Une petite boucle suffit pour retrouver les élément du tableau
    // retourné dans la fonction lit_xml()
    foreach($xml as $row) { // ligne 47
    
      echo $row[0];
      // affiche 200
      echo $row[1];
      // affiche Koogi
    
      }
    
    ?>
    Le code m'affiche le contenu du fichier XML mais en plus il affiche aussi une erreur:
    Warning: Invalid argument supplied for foreach() in C:\Program Files\EasyPHP 2.0\www\Untitled-1.php on line 47
    J'aimerai savoir la cause de cette erreur si vous avez une idée

    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
    Parce que votre fonction lit_xml ne retourne pas un tableau comme prévu et ce n'est pas en plaçant des arobases sur les instructions pouvant poser problème que vous en aurez la cause. Cela dit, pourquoi passer par les expressions régulières alors que sous PHP 5 vous avez plusieurs possibilités standards : SimpleXML, DOM, XMLReader, XML (SAX/Expat) ?

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 233
    Par défaut
    Merci julp pour ta réponse mais je tiens vraiment à ne pas travailler avec PHP 5 puisque dans le serveur c'est easyphp 1.8 qu'est installé alors je ne vx pa prendre le risque de le supprimer pour passer easyphp 2.0 puisque toute mes application sont faites avec php 4.

  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
    Citation Envoyé par namstou3
    mais je tiens vraiment à ne pas travailler avec PHP 5 puisque dans le serveur c'est easyphp 1.8 qu'est installé alors je ne vx pa prendre le risque de le supprimer pour passer easyphp 2.0 puisque toute mes application sont faites avec php 4.
    Grave erreur : PHP 4 tire progressivement sa révérence et ne sera à terme plus maintenu ! Le passage à PHP 5, n'offre que des avantages (mis à part la migration bien sûr à l'égard de certains aspects) et si vous faites parti des derniers à utiliser PHP 4 pendant que la majorité utilise PHP 5 (c'est déjà le cas), vous allez rencontrez bien des difficultés à obtenir de l'aide (de nouvelles fonctions sont apparues, leurs paramètres et le fonctionnement interne de PHP évoluent, dont notamment, et de manière conséquente, au niveau objet). Je pense que vous devriez tout de même sérieusement étudier la question

    Pourquoi y a-t-il une balise PHP avant votre document XML ? Et votre document XML n'est pas tout à fait correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="ISO-8859-1"?>
    Sinon votre "script" fonctionne. Vous devriez retirer les arobases pour en savoir davantage (erreur sur le chemin, allow_url_fopen à Off - d'ailleurs il n'est probablement pas nécessaire de passer par une URL HTTP ici, autres).

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 233
    Par défaut
    Merci beaucoup julp pour le conseil, t'a tout à fais raison.. Sinon mon problème est résolu. Il me faut juste un petit truc.

    Mon code est le suivant (un nouveau code):

    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
     
    <?php
        $fichier = "apcvm_all.xml";
     
        // Ma propre fonction de traitement du texte
        // qui est appelée par le "parseur"
        function fonctionTexte($parseur, $texte)
        {
            // Dans l'immédiat nous nous contentons d'afficher
            // le texte brut accompagné d'un simple retour à la ligne
            echo $texte."<br/>";
        }
     
        // Création du parseur XML
        $parseurXML = xml_parser_create();
     
        // Je précise le nom de la fonction a appeler
        // lorsque du texte est rencontré
        xml_set_character_data_handler($parseurXML, "fonctionTexte");
     
        // Ouverture du fichier
        $fp = fopen($fichier, "r");
        if (!$fp) die("Impossible d'ouvrir le fichier XML");
     
        // Lecture ligne par ligne
        while ( $ligneXML = fgets($fp, 1024)) {
            // Analyse de la ligne
            // REM: feof($fp) retourne TRUE s'il s'agit de la dernière
            //      ligne du fichier.
            xml_parse($parseurXML, $ligneXML, feof($fp)) or
                die("Erreur XML");
        }
     
        xml_parser_free($parseurXML);
        fclose($fp);
    ?>
    ça m'affiche exactement le contenu de mon fichier XML, mais ce que je veux c'est ne pas tous affiché, je veux par exemple mettre un liste déroulante ça dépend du choix que je fais ça m'affiche seulement le contenu de la sélection. Avez-vous une idée??

    Merci

  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
    Citation Envoyé par namstou3
    je veux par exemple mettre un liste déroulante ça dépend du choix que je fais ça m'affiche seulement le contenu de la sélection. Avez-vous une idée??
    Sélection de quoi ? Contenu de quoi ?

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 233
    Par défaut
    Désolé je crois que je n'étais pas clair dans mon message, au fait voilà par exemple mon fichier XML:


    <opcvm_all>
    <opcvm id="4">
    <date>01/01/2007</date>
    <vl>0000</vl>
    <trois_ans>2007</trois_ans>
    <un_an>2007</un_an>
    <six_mois>2007</six_mois>
    </opcvm>
    <opcvm id="3">
    <date>01/01/2007</date>
    <vl>1111</vl>
    <trois_ans>0000</trois_ans>
    <un_an>0000</un_an>
    <six_mois>0000</six_mois>
    </opcvm>
    </opcvm_all>
    je veux récupérer les attributs (id dans l'exemple) et les afficher dans une liste déroulante et une fois je choisi l'id voulu, ça m'affiche comme résultat le contenue.. D'après l'exemple j'aurai dans ma liste déroulante 1 et 3 si je choisi 3, j'aurai:
    <date>01/01/2007</date>
    <vl>1111</vl>
    <trois_ans>0000</trois_ans>
    <un_an>0000</un_an>
    <six_mois>0000</six_mois>
    et ainsi de suite

    Merci

  8. #8
    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
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    <?php
    $fichier = 'opcvm_all.xml';
    $parseur = xml_parser_create();
     
    if ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['id'])) {
        $display = FALSE;
     
        function startDocument() {}
     
        function endDocument() {}
     
        function startElement($parser, $name, $attrs) {
            if ($GLOBALS['display']) {
                echo "&lt;$name&gt;";
            }
            if (!strcasecmp($name, 'opcvm') && $attrs['ID'] == $_POST['id']) {
                $GLOBALS['display'] = TRUE;
            }
        }
     
        function endElement($parser, $name) {
            if ($GLOBALS['display']) {
                if (!strcasecmp($name, 'opcvm')) {
                    $GLOBALS['display'] = FALSE;
                } else {
                    echo "&lt;/$name&gt;<br/>";
                }
            }
        }
     
        function characterData($parseur, $data) {
            if ($GLOBALS['display']) {
                echo $data;
            }
        }
     
        xml_set_element_handler($parseur, 'startElement', 'endElement');
        xml_set_character_data_handler($parseur, 'characterData');
    } else {
     
        function startDocument() {
            echo '<form method="post">';
            echo 'Id : <select name="id">';
        }
     
        function endDocument() {
            echo '</select>';
            echo '<br />';
            echo '<input type="submit" value="Valider" />';
            echo '</form>';
        }
     
        function startElement($parser, $name, $attrs) {
            if (!strcasecmp($name, 'opcvm') && isset($attrs['ID'])) {
                echo '<option>' . $attrs['ID'] . '</option>';
            }
        }
     
        function endElement($parser, $name) {}
     
        xml_set_element_handler($parseur, 'startElement', 'endElement'/*FALSE*/);
    }
     
    $fp = fopen($fichier, 'r');
    if (!$fp) die("Impossible d'ouvrir le fichier XML");
    startDocument();
    while ($ligneXML = fgets($fp, 1024)) {
        xml_parse($parseur, $ligneXML, feof($fp)) or die(sprintf("Erreur XML : %s à la ligne %d", xml_error_string(xml_get_error_code($parseur)), xml_get_current_line_number($parseur)));
    }
    endDocument();
    xml_parser_free($parseur);
    fclose($fp);

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 233
    Par défaut
    Merci julp pour ta réponse mais ça ne marche pas, voilà l'erreur qu'il m'affiche à l'exécution.

    Warning: fopen(opcvm_all.xml) [function.fopen]: failed to open stream: No such file or directory in C:\Program Files\EasyPHP 2.0\www\test.php on line 64
    Impossible d'ouvrir le fichier XML
    j'ai essayé de résoudre le problème mais j'ai pas réussi, t'as une idée??

    Merci

  10. #10
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 233
    Par défaut
    Non au fait c'est bon julp j'ai réglé le problème (mon fichier XML n'était pas au bon emplacement) et ça marche nikel

    Merci beaucoup

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

Discussions similaires

  1. Soucis avec un script d'image
    Par Baldy dans le forum Free
    Réponses: 2
    Dernier message: 10/08/2009, 09h31
  2. souci avec un script sur packages
    Par sophiedu13 dans le forum Administration système
    Réponses: 4
    Dernier message: 25/10/2007, 15h38
  3. soucis avec mon script de news
    Par Ludo75 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/01/2007, 14h41
  4. Petit souci avec un script
    Par Equinoxe5 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 30/09/2006, 15h43
  5. [Upload] Souci avec un script d'upload
    Par Ludo75 dans le forum Langage
    Réponses: 2
    Dernier message: 17/01/2006, 14h16

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