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] modification d'un XML ? [Fait]


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut [DOM] modification d'un XML ?
    Salut à tous,

    mon script me renvoit l'erreur suivante (ligne rouge du script) :

    Fatal error: Call to a member function insertData() on a non-object in /mnt/107/sdc/7/2/.../inscrip.php on line 57
    PHP5 est bien activé sur mon compte FREE, grâce à l'astuce du fichier .htaccess.

    inscrip.php
    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
    			$doc = new DOMDocument();
    			
    			$source = "id_".$_SESSION['num'].".xml";
    			
    			$doc->load($source);
    			
    			$roots = $doc->getElementsByTagName("root");
    			
    			foreach($roots as $root){
    				$ids_auto = $doc->getElementsByTagName("num_auto");
    				$id_auto = $ids_auto->item(0)->firstChild;
    				$id_auto->insertData(0, "id_".$_SESSION['num']);
    				
    				$noms = $doc->getElementsByTagName("nom");
    				$nom = $noms->item(0)->firstChild;
    				$nom->insertData(0, "id_".$_SESSION['nom']);
    	
    				$prenoms = $doc->getElementsByTagName("prenom");
    				$prenom = $prenoms->item(0)->firstChild;
    				$prenom->insertData(0, "id_".$_SESSION['prenom']);
    			}
    						
    			$doc->saveXML();
    Une idée, même une petite ... je dois rendre ça pour la fin de semaine !!!

    Gôm
    Quand on n'a pas d'tête, on a ...

  2. #2
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut
    Sinon, j'ai essayé plus simplement comme ça :

    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
    			$doc = new DOMDocument();
     
    			$doc->load("id_".$_SESSION['num'].".xml");
     
    			$ids_auto = $doc->getElementsByTagName("num_auto");
    			$id_auto = $ids_auto->item(0)->firstChild;
    			$id_auto->insertData(0, "id_".$_SESSION['num']);
     
    			$noms = $doc->getElementsByTagName("nom");
    			$nom = $noms->item(0)->firstChild;
    			$nom->insertData(0, "id_".$_SESSION['nom']);
     
    			$prenoms = $doc->getElementsByTagName("prenom");
    			$prenom = $prenoms->item(0)->firstChild;
    			$prenom->insertData(0, "id_".$_SESSION['prenom']);
     
    			$doc->saveXML();
    ...
    Quand on n'a pas d'tête, on a ...

  3. #3
    Membre confirmé
    Avatar de DBProg
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 579
    Points
    579
    Par défaut
    Salut !

    J'ai cherché dans la doc php mais je n'ai pas trouvé quelles sont les propriétés d'un objet DOMNode (ce que doit être $id_auto).

    Par contre, peut-être quelque chose tout bête, essaye de tester si $id_auto != NULL avant de faire insertData pour voir si l'objet est bien instancié.
    La vitesse de la lumière étant supérieure à la vitesse du son, certaines personnes brillent encore tant qu'elles n'ont pas parlé
    -----------------------------------------------------------
    Retrouvez mes articles informatique sur mon Site Developpez.
    Le reste, sur le Site perso !


  4. #4
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut
    Citation Envoyé par dbprog
    Salut !

    J'ai cherché dans la doc php mais je n'ai pas trouvé quelles sont les propriétés d'un objet DOMNode (ce que doit être $id_auto).

    Par contre, peut-être quelque chose tout bête, essaye de tester si $id_auto != NULL avant de faire insertData pour voir si l'objet est bien instancié.

    je viens de faire :
    il me renvoit rien !

    Donc $id_auto n'est pas instancié ?
    Quand on n'a pas d'tête, on a ...

  5. #5
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut
    Comme tu peux le voir, mon élément "num_auto" n'a pas de fils !

    C'est un peu idiot de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id_auto = $ids_auto->item(0)->firstChild;
    mais apparemment, il faut toujours faire comme ça, même pour traiter un élément qui n'a pas de fils, ce qui est mon cas !
    Quand on n'a pas d'tête, on a ...

  6. #6
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut
    Pourquoi, lui ça fonctionne et pas moi !
    Quand on n'a pas d'tête, on a ...

  7. #7
    Membre confirmé
    Avatar de DBProg
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 579
    Points
    579
    Par défaut
    Là je t'avoue que je ne sais pas trop, mais essaye de faire une analyse remontante pour savori à partir d'où il y a un problème.

    Teste si $noms->item(0) n'est pas null. En suite si $noms n'est pas null etc... Tu trouveras à partir d'où tu as une référence nulle et donc tu pourras cerner le problème.
    La vitesse de la lumière étant supérieure à la vitesse du son, certaines personnes brillent encore tant qu'elles n'ont pas parlé
    -----------------------------------------------------------
    Retrouvez mes articles informatique sur mon Site Developpez.
    Le reste, sur le Site perso !


  8. #8
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut
    Citation Envoyé par dbprog
    Là je t'avoue que je ne sais pas trop, mais essaye de faire une analyse remontante pour savori à partir d'où il y a un problème.

    Teste si $noms->item(0) n'est pas null. En suite si $noms n'est pas null etc... Tu trouveras à partir d'où tu as une référence nulle et donc tu pourras cerner le problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    			echo $id_auto = $ids_auto;
    			echo $id_auto = $ids_auto->item(0);
    			echo $id_auto = $ids_auto->item(0)->firstChild;
    me renvoit :
    Object id #2
    Object id #3
    rien
    Quand on n'a pas d'tête, on a ...

  9. #9
    Membre confirmé
    Avatar de DBProg
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 579
    Points
    579
    Par défaut
    Donc voilà, tu sais que c'est le firstChild qui n'a pas de valeur maintenant. A totu hasard as-tu esayé de faire un insertData sur item(0) (sans le firstChild ?

    Après je ne peux pas t'en dire plus. Par contre, je ferai attention si j'étais toi, car l'api DOM dans php est encore en version non stable, ce qui fait qu'ils peuvent changer les noms de fonction d'une version à une autre, et tu peux te retrouver avec ton code qui ne fonctionne plus sur une simple upgrade de php.
    La vitesse de la lumière étant supérieure à la vitesse du son, certaines personnes brillent encore tant qu'elles n'ont pas parlé
    -----------------------------------------------------------
    Retrouvez mes articles informatique sur mon Site Developpez.
    Le reste, sur le Site perso !


  10. #10
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut
    Citation Envoyé par dbprog
    Donc voilà, tu sais que c'est le firstChild qui n'a pas de valeur maintenant. A totu hasard as-tu esayé de faire un insertData sur item(0) (sans le firstChild ?
    Oui ça me donne la même erreur qu'avait la personne dont le problème a été résolue en ajoutant FirstChild ... sauf que moi en l'ajoutant ... ça me fait toujours une erreur !


    Citation Envoyé par dbprog
    Après je ne peux pas t'en dire plus. Par contre, je ferai attention si j'étais toi, car l'api DOM dans php est encore en version non stable, ce qui fait qu'ils peuvent changer les noms de fonction d'une version à une autre, et tu peux te retrouver avec ton code qui ne fonctionne plus sur une simple upgrade de php.
    Malheureusement, je vais devoir vivre avec !!!
    Quand on n'a pas d'tête, on a ...

  11. #11
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Je ne suis pas sûr de savoir où tu veux insérer les données, mais il ne FAUT PAS mettre de firstChild s'il n'y a pas de fils. Ca n'a pas de sens.

    Citation Envoyé par dbprog
    J'ai cherché dans la doc php mais je n'ai pas trouvé quelles sont les propriétés d'un objet DOMNode (ce que doit être $id_auto).
    Tu as mal cherché, tout est là : http://fr3.php.net/manual/fr/ref.dom.php

    Si ça peut t'aider : tutoriel PHP5 / DOM

  12. #12
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    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
    $doc = new DOMDocument();
    			
    			$source = "id_".$_SESSION['num'].".xml";
    			
    			$doc->load($source);
    			
    			$roots = $doc->getElementsByTagName("root");
    			
    			foreach($roots as $root){
    				$ids_auto = $doc->getElementsByTagName("num_auto");
    				$id_auto = $ids_auto->item(0);
                                    $text = $doc->createTextNode("id_".$_SESSION['num']);
    				$id_auto->appendChild($text);
    				
    				$noms = $doc->getElementsByTagName("nom");
    				$nom = $noms->item(0)->firstChild;
    				$nom->insertData(0, "id_".$_SESSION['nom']);
    	
    				$prenoms = $doc->getElementsByTagName("prenom");
    				$prenom = $prenoms->item(0)->firstChild;
    				$prenom->insertData(0, "id_".$_SESSION['prenom']);
    			}
    						
    			$doc->saveXML();
    et ça ?
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  13. #13
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut
    Citation Envoyé par siddh
    et ça ?
    J'ai essayé ça :

    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
    			$doc = new DOMDocument();
     
    			$source = "id_".$_SESSION['num'].".xml";
     
    			$doc->load($source);
     
    			$roots = $doc->getElementsByTagName("root");
     
    			foreach($roots as $root){
    				$ids_auto = $doc->getElementsByTagName("num_auto");
    				$id_auto = $ids_auto->item(0);
    				$text = $doc->createTextNode("id_".$_SESSION['num']);
    				$id_auto->appendChild($text);
     
    				$noms = $doc->getElementsByTagName("nom");
    				$nom = $noms->item(0);
    				$text = $doc->createTextNode($_SESSION['nom']);
    				$nom->appendChild($text);
     
    				$prenoms = $doc->getElementsByTagName("prenom");
    				$prenom = $prenoms->item(0);
    				$text = $doc->createTextNode($_SESSION['prenom']);
    				$prenom->appendChild($text);
    			}
     
    			$doc->saveXML();
    mais ça ne modifie en rien mon fichier xml
    Quand on n'a pas d'tête, on a ...

  14. #14
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par ghohm
    mais ça ne modifie en rien mon fichier xml
    Ca tu n'en sais rien vu que tu ne récupères pas la sortie de saveXML (qui est une chaîne de caractères).
    si tu veux écrire un fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $doc->save($nomDuFichierCible);

  15. #15
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    Citation Envoyé par Eusebius
    Ca tu n'en sais rien vu que tu ne récupères pas la sortie de saveXML (qui est une chaîne de caractères).
    si tu veux écrire un fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $doc->save($nomDuFichierCible);

    +1
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  16. #16
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut
    +2 !

    Je vous aiiiiiiiiiiiime !

    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
    $doc = new DOMDocument();
     
    $source = "default.xml";
    $cible = "id_".$_SESSION['num'].".xml";
     
    $doc->load($source);
     
    $ids_auto = $doc->getElementsByTagName("num_auto");
    $id_auto = $ids_auto->item(0);
    $text = $doc->createTextNode("id_".$_SESSION['num']);
    $id_auto->appendChild($text);
     
    $noms = $doc->getElementsByTagName("nom");
    $nom = $noms->item(0);
    $text = $doc->createTextNode($_SESSION['nom']);
    $nom->appendChild($text);
     
    $prenoms = $doc->getElementsByTagName("prenom");
    $prenom = $prenoms->item(0);
    $text = $doc->createTextNode($_SESSION['prenom']);
    $prenom->appendChild($text);
     
    $doc->save($cible);
    A bientôt ... généralement, il m'arrive un autre problème juste après en avoir résoud un !
    Quand on n'a pas d'tête, on a ...

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

Discussions similaires

  1. [DOM] Pb création nodes XML dynamiques
    Par zzman dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 20/04/2006, 08h23
  2. DOM - naviguer dans un XML en javascript
    Par hpfx dans le forum Général JavaScript
    Réponses: 36
    Dernier message: 08/11/2005, 22h43
  3. [DOM] Génération dynamique fichier xml
    Par Fabouney dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 03/10/2005, 09h45
  4. Modification de fichier XML avec XSLT
    Par osmoz dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/07/2005, 11h04
  5. Stratégie DOM ou SAX pour xml ?
    Par blackhorus dans le forum Format d'échange (XML, JSON...)
    Réponses: 9
    Dernier message: 28/03/2005, 17h07

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