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] Ecrire dans mon XML avec du PHP


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [DOM] Ecrire dans mon XML avec du PHP
    Je suis en train de faire un module tout bête de mise a jour de site web et je n'arrive pas a le finaliser à cause d'une erreur au niveau de mon code PHP, j'aimerai un coup de main si c'est possible.

    Mon xml a cette tete la:
    Code XML : 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
    <?xml version="1.0" encoding="iso-8859-1"?>
    <root>
    <liste>
     
    <news>
    <nom>blabla</nom>
    <mail>blablabla</mail>
    <msg>mess1</msg>
    </news>
     
    <news>
    <nom>blabla</nom>
    <mail>blablabla</mail>
    <msg>mess2</msg>
    </news>
     
    </liste>
    </root>
    Et je tente d'ecrire dedans avec un code comme ca:
    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
    <?php
     
    	$pseudo = $_POST["pseudo"];
    	$mail = $_POST["mail"];
    	$mess = $_POST["mess"];
     
    	$urlxml = "./../xml/news.xml";
     
    	$doc = new DOMDocument();
     
    	$doc->loadXML($urlxml);
     
    	$newnom = $doc->createTextNode(utf8_encode($pseudo));
    	$newmail = $doc->createTextNode(utf8_encode($mail));
    	$newmsg = $doc->createTextNode(utf8_encode($mess));
     
    	$balnews = $doc->createElement('news');
    	$balnom = $doc->createElement('nom');
    	$balmail = $doc->createElement('mail');
    	$balmess = $doc->createElement('msg');
     
    	$balnom->appendChild($newnom);
    	$balmail->appendChild($newmail);
    	$balmess->appendChild($newmsg);
     
    	$balnews->appendChild($balnom);
    	$balnews->appendChild($balmail);
    	$balnews->appendChild($balmess);
     
    	$racines = $doc->getElementsByTagName('liste');
    	$racine = $racines->item(0);
     
    	$racine->appendChild($balnews);
     
    	$doc->save($urlxml);
     
    ?>
    Le probleme c'est que j'ai l'erreur suivante sur la ligne en gras:
    Fatal error: Call to a member function appendChild() on a non-object in /data/members/blablabla/news.php
    Je commence a craquer

  2. #2
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut


    Tu utilises quelle version de PHP ?
    Si tu es en version 5 tu peux utiliser l'extension SimpleXML qui est plus simple à gérer.

    Pour ce qui est de ton erreur tu devrais faire un et tu verras que tu auras un objet vide (c'est une supposition mais une supposition quasi certaine ).

  3. #3
    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
    La méthode loadXML c'est pour créer un DomDocument à partir d'une chaîne. La méthode load, qui conviendrait à votre cas, fait la même chose à partir du nom d'un fichier.

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ca marche! Merci beaucoup

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je vais pas faire un deuxieme post pour ca mais j'ai une petite question supplementaire, le module marche, c'est cool, mais quand je fais un retour a la ligne dans la zone de texte de ma page html (variable mess) il me la vire dans le xml. Du coup j'ai tenté un truc et j'ai comme 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
    37
    38
    39
    40
    41
    42
    <?php
     
    	$pseudo = $_POST["pseudo"];
    	$mail = $_POST["mail"];
    	$mess = $_POST["mess"];
     
    	$entrephp = array("\n");
    	$entrehtml = array("<br/>");
     
    	$mess = str_replace($entrephp, $entrehtml, $mess);
     
    	$urlxml = "./../xml/news.xml";
     
    	$doc = new DOMDocument();
     
    	$doc->load($urlxml);
     
    	$newnom = $doc->createTextNode(utf8_encode($pseudo));
    	$newmail = $doc->createTextNode(utf8_encode($mail));
    	$newmsg = $doc->createTextNode(utf8_encode($mess));
     
    	$balnews = $doc->createElement('news');
    	$balnom = $doc->createElement('nom');
    	$balmail = $doc->createElement('mail');
    	$balmess = $doc->createElement('msg');
     
    	$balnom->appendChild($newnom);
    	$balmail->appendChild($newmail);
    	$balmess->appendChild($newmsg);
     
    	$balnews->appendChild($balnom);
    	$balnews->appendChild($balmail);
    	$balnews->appendChild($balmess);
     
    	$racines = $doc->getElementsByTagName('liste');
    	$racine = $racines->item(0);
     
    	$racine->appendChild($balnews);
     
    	$doc->save($urlxml);
     
    ?>
    Et je me retrouve avec des "<br/>" sur ma page qui affiche les news au lieu d'avoir des vrais retour chariot, je suppose que ca vient du fait que je stock le contenu de ma balise <msg></msg> dans un textnode sur cette page et du coup le navigateur n'est plu capable de l'interpreter mais j'aimerai savoir s'il y a une solution.

  6. #6
    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
    Je vous recommande de n'ajouter les balises <br /> que lorsque vous voudrez réaliser un affichage HTML de vos données, restant ainsi en toute circonstance exploitable telles quelles. Cela ne semble alors poser aucun problème par la suite puisque l'on peut utiliser la fonction nl2br :
    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
    <?php
    define('FICHIER_XML', 'testnl.xml');
     
    $texte = <<< EOT
    Un texte avec des
    SAUTS DE LIGNE
    .
    EOT;
     
    if (!file_exists(FICHIER_XML)) {
        $dom = new DomDocument;
        $racine = $dom->createElement('racine');
        $message = $dom->createElement('message', $texte);
        echo nl2br($message->nodeValue);
        $dom->appendChild($racine);
        $racine->appendChild($message);
        $dom->save(FICHIER_XML);
    } else {
        $dom = DomDocument::load(FICHIER_XML);
        echo nl2br($dom->documentElement->firstChild->nodeValue);
    }
    Par rapport à votre code c'est vous qui remplacez (via str_replace) les sauts de ligne par <br /> (et de façon non portable qui plus est ).

    PS : pour obtenir la racine du document, vous pouvez simplifier en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $racine = $doc->documentElement;

Discussions similaires

  1. Ecrire dans un XML avec XMLStreamWriter
    Par pikamo dans le forum Services Web
    Réponses: 10
    Dernier message: 29/06/2015, 10h26
  2. [DOM] écrire dans fichier xml avec PHP5
    Par devil2005 dans le forum Bibliothèques et frameworks
    Réponses: 16
    Dernier message: 10/06/2008, 18h54
  3. [PHP-JS] Ecrire un fichier xml avec un string XML
    Par bobic dans le forum Langage
    Réponses: 1
    Dernier message: 22/12/2006, 14h18
  4. Ecrire un fichier XML avec la méthode Dom
    Par aswat dans le forum Général Python
    Réponses: 2
    Dernier message: 20/05/2006, 19h41
  5. [DOM XML] Insertion données dans fichier XML avec PHP pour Flash ?
    Par ExSter dans le forum Bibliothèques et frameworks
    Réponses: 17
    Dernier message: 10/05/2006, 11h16

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