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] Message d'erreur à la lecture d'un fichier XML en PHP4


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 67
    Points
    67
    Par défaut [DOM XML] Message d'erreur à la lecture d'un fichier XML en PHP4
    Bonjour,

    J'essaye de comprendre comment lire et extraire des données d'un fichier XML en utilisant DOMXML sachant que je travaille avec PHP4. J'ai repris un code existant et j'essaye de le comprendre mais j'ai un message d'erreur et je ne sais pas d'où il peut venir.

    Voici donc mon fichier XML tout simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <dictionary>
     <entry>
        <word>Hello</word>
        <meaning>used to express a greeting</meaning>
        <example>Hello World!</example>
     </entry>
    </dictionary>
    et mon code PHP devant extraire les données de ce fichier :
    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
     
    <?php
    $xml_path = "netude.xml";
        if (!$dom = domxml_open_file($xml_path)) {
            //the above requires absolube path
            exit("Could not access the XML source.");
        }
        $root = $dom->document_element(); //obtain the root
        $array_entry = $root->get_elements_by_tagname("entry"); //gets all <entry> DomElems
     
    	foreach ($array_entry as $entry_dom_elem) {   
            $childnodes = $entry_dom_elem->child_nodes();
            foreach ($childnodes as $child) { //cycle thru <word>, <meaning>, <example>
                echo "node name: ".$child->tagname()."; contains: " . $child->get_content()."<br>";
     
            }
        }
    ?>
    Donc quand je lance le fichier PHP j'ai ce message :
    Fatal error: Call to undefined method: domtext->tagname() in ...
    Du coup, je retire la partie d'affichage du tagname() et là, cela m'affiche le reste correctement.
    contains:
    contains: Hello
    contains:
    contains: used to express a greeting
    contains:
    contains: Hello World!
    contains:
    Qu'en pensez vous ? ce message d'erreur viendrait-il du code PHP ou d'une mauvaise configuration du serveur ?

    Merci à vous

  2. #2
    Expert éminent sénior

    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
    Points : 17 778
    Points
    17 778
    Par défaut
    L'indentation/mise en forme de votre document fait que l'élément entry contient également des objets de type DomText, sur lesquels, la méthode tagname est inappliquable.

    Il faut soit les gérer soit les ignorer lors du traitement (option DOMXML_LOAD_DONT_KEEP_BLANKS lors du dom_open_[file|mem]).

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 67
    Points
    67
    Par défaut
    Merci beaucoup pour cette réponse rapide, précise et efficace
    Cela fonctionne maintenant.

    Voici donc ma modification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    domxml_open_file($xml_path,DOMXML_LOAD_DONT_KEEP_BLANKS)

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 67
    Points
    67
    Par défaut
    Pour continuer dans mes tests, j'ai changé de fichier XML et en ai pris un plus étoffé.

    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
    <?xml version="1.0" encoding="iso-8859-1"?>
    <catalog>
    <product place="1">
    <identifiant_produit>1414</identifiant_produit>
    <denomination>
    Montre dame boite chromé bracelet double tour de bras.
    </denomination>
    <identifiant_reference/>
    <taille></taille>
    <couleur>Noir</couleur>
    <caracteristique3>Noir</caracteristique3>
    <description>Mouvement pc21 garanti 1 an </description>
    <url_photo1>http://www.eritime.fr/photos/1414.jpg</url_photo1>
    <url_photo2/>
    <url_ficheproduit>
    http://www.eritime.fr/?page=produit_unit&id_produit=173
    </url_ficheproduit>
    <marque/>
    <garantie/>
    <id_produit>173</id_produit>
    <prixHT>14.000</prixHT>
    <stock>10</stock>
    <promotion>0</promotion>
    <prixHT_remise/>
    </product>
    </catalog>
    Avec le même 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
    <?php
    $xml_path = "netude2.xml";
        if (!$dom = domxml_open_file($xml_path,DOMXML_LOAD_DONT_KEEP_BLANKS)) {
            //the above requires absolube path
            exit("Could not access the XML source.");
        }
        $root = $dom->document_element();
        $array_entry = $root->get_elements_by_tagname("product"); 
     
    	foreach ($array_entry as $entry_dom_elem) {   
            $childnodes = $entry_dom_elem->child_nodes();
            foreach ($childnodes as $child) { 
                echo "node name: ".$child->tagname()."; contains: " . $child->get_content()."<br>";
     
            }
        }
    ?>
    Il me balance encore un message d'erreur
    Warning: domxml_open_file() [function.domxml-open-file]: EntityRef: expecting ';'

  5. #5
    Expert éminent sénior

    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
    Points : 17 778
    Points
    17 778
    Par défaut
    L'erreur ne vient pas du code PHP mais du XML, à cet endroit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.eritime.fr/?page=produit_unit&id_produit=173
    &, étant un caractère spécial, il doit être remplacé par l'entité correspondante : &amp; ou alors être encadré par une section CDATA (lui-seul ou non).

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 67
    Points
    67
    Par défaut
    D'accord, il me semblait bien que cela devait venir du fichier XML mais là, j'aurais pas trouvé tout seul. Merci encore.

    Donc si mon fichier XML est récupéré sous cette forme, il va falloir que je modifie tous les caractères spéciaux ou que je mette tous les elements de texte comportant des caractères spéciaux dans des section CDATA avant de le parser ?

  7. #7
    Expert éminent sénior

    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
    Points : 17 778
    Points
    17 778
    Par défaut
    Oui mais ce serait plutôt et surtout à son producteur d'arranger ce point

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

Discussions similaires

  1. Erreurs de lecture d'un fichier xml depuis web
    Par Ema1714 dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 30/03/2014, 18h28
  2. [DOM] Copier le contenu des fichiers XML d'un meme rep dans un seul fichier XML !
    Par amo-said dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 20/05/2011, 18h18
  3. Réponses: 0
    Dernier message: 20/05/2011, 16h48
  4. Exemple de lecture d'un fichier XML avec DOM
    Par Ioan dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 08/03/2011, 18h48
  5. [DOM] Lecture d'un fichier XML en url en PHP
    Par diakite4 dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 21/05/2008, 16h31

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