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] Erreur sur createElement()


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Points : 65
    Points
    65
    Par défaut [DOM] Erreur sur createElement()
    Bonsoir,
    En utilisant la fonction create_element de domxml, j'obtiens une erreur :
    Fatal error: Call to undefined method DOMElement::create_element() in *** on line 131
    )
    Je ne comprends pas pourquoi cette erreur .. (la fct est bien la bonne ?)

    Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $rac = $dom->getElementsByTagName("ips")->item(0);
    $node = $rac->create_element("ip");
    $newnode = $rac->append_child($node);
    $newnode->set_attribute("date", time());
    mon xml est du genre :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <ips>
    <ip date="124564668">12.124.215</ip>
    <ip date="124564668">12.124.215</ip>
    <ip date="124564668">12.124.215</ip>
    <ip date="124564668">12.124.215</ip>
    </ips>

    Merci pour votre aide ..

  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 777
    Points
    17 777
    Par défaut
    Vous utilisez l'extension DOM ou DOM XML ? Parce getElementsByTagName n'existe que pour l'extension DOM (le nom correct est get_elements_by_tagname pour DOM XML).

    Voilà ce que j'ai écrit pour DOM 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
    <?php
    $dom = domxml_open_file('ips.xml', DOMXML_LOAD_DONT_KEEP_BLANKS);
    $racine = $dom->document_element();
    $newip = $dom->create_element('ip');
    $newip->set_attribute('date', time());
    $newip = $racine->append_child($newip);
     
    $newtexte = $dom->create_text_node('12.124.215');
    $newtexte = $newip->append_child($newtexte);
     
    // Pour vérification :
    header('Content-type: text/plain');
    echo $dom->dump_mem(TRUE);
    ?>

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Points : 65
    Points
    65
    Par défaut
    Merci.

    Cette fois-ci j'ai cette réponse :
    Fatal error: Call to undefined function domxml_open_file() in *** on line 111
    )
    Je ne vois pas pourquoi cette erreur ..

  4. #4
    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 777
    Points
    17 777
    Par défaut
    Quelle version de PHP ? Il s'agit bien de l'extension DOM XML ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Points : 65
    Points
    65
    Par défaut
    Normalement oui, j'ai activé sur Wamp et j'ai le même résultat ..

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Points : 65
    Points
    65
    Par défaut
    Enfaite je pense savoir pourquoi, j'utilise ça dans une classe, comment faire ?
    C'est avec le extend ou un truc du genre, mais comme l'utiliser ?

  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 777
    Points
    17 777
    Par défaut
    Citation Envoyé par Klimium
    Normalement oui, j'ai activé sur Wamp et j'ai le même résultat ..
    C'est facile à vérifier, notamment en regardant la sortie de phpinfo. Si vous utilisez, l'extension DOM en revanche, cela se traduit ainsi :
    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
    $dom = new DomDocument;
    $dom->preserveWhiteSpace = FALSE;
    $dom->formatOutput = TRUE;
    $dom->load('ips.xml');
    $racine = $dom->documentElement;
    $newip = $dom->createElement("ip");
    $newip->setAttribute('date', time());
    $newip = $racine->appendChild($newip);
     
    $newtexte = $dom->createTextNode('12.124.215');
    $newtexte = $newip->appendChild($newtexte);
     
    // Pour vérification :
    header('Content-type: text/plain');
    echo $dom->saveXML();
    ?>
    Citation Envoyé par Klimium
    Enfaite je pense savoir pourquoi, j'utilise ça dans une classe, comment faire ?
    C'est avec le extend ou un truc du genre, mais comme l'utiliser ?
    Il faudrait être plus précis, en donnant du code par exemple

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Points : 65
    Points
    65
    Par défaut
    Ca change quoi en faite que je fasse par DOM ou DomXML ?
    Tu me conseilles lequel ?

    Et bien enfaite je traite les données du fichier xml dans une classe, c'est pour ça que ça ne fonctionne pas .. (ds une simple fct ça marche).

  9. #9
    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 777
    Points
    17 777
    Par défaut
    Citation Envoyé par Klimium
    Ca change quoi en faite que je fasse par DOM ou DomXML ?
    Tu me conseilles lequel ?
    Vous n'avez pas le choix justement ! PHP 4, c'est l'extension DOM XML. PHP 5, c'est l'extension DOM tout court. Elles définissent à peu près les mêmes fonctionnalités mais comme vous pouvez le remarquer elles ne portent pas les mêmes noms et l'extension DOM donc PHP 5 est plus orientée objet ! (c'est vrai qu'on peut utiliser l'extension DOM XML sous PHP 5 mais il faut passer par l'extension PECL).

    Citation Envoyé par Klimium
    Et bien enfaite je traite les données du fichier xml dans une classe, c'est pour ça que ça ne fonctionne pas .. (ds une simple fct ça marche).
    Il manque des $this ? Sans code, je ne suis pas en mesure de vous aider plus ...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Points : 65
    Points
    65
    Par défaut
    Oki, je vais utiliser DOM alors

    Sinon j'ai un problème avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $newtexte = $dom->createTextNode($ip_posteur);
    			$newtexte = $newip->appendChild($newtexte);
    Il me fait est balise du type <ip date="122461" />

    Alors que je voudrais : <ip date="125561485">123.4543.45</ip>

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Points : 65
    Points
    65
    Par défaut
    Voilà mon code en entier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $dom = new DomDocument;
    $dom->preserveWhiteSpace = FALSE;
    $dom->formatOutput = TRUE;
    $dom->load($fichier_ips);
    $racine = $dom->documentElement;
    $newip = $dom->createElement("ip");
    $newip->setAttribute('date', time());
    $newip = $racine->appendChild($newip);
     
    $newtexte = $dom->createTextNode($ip_posteur);
    $newtexte = $newip->appendChild($newtexte);
    D'où vient le problème ?

  12. #12
    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 777
    Points
    17 777
    Par défaut
    Bonne question, avec votre code j'obtiens :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0"?>
    <ips>
      <ip date="124564668">12.124.215</ip>
      <ip date="124564668">12.124.215</ip>
      <ip date="124564668">12.124.215</ip>
      <ip date="124564668">12.124.215</ip>
      <ip date="1181322637">0</ip>
    </ips>
    Celui à 0 étant le nouveau.

    Pour que le tag soit vide (<ip date="..."/>), c'est que l'ajout du noeud texte n'est pas effective (appendChild). Mais vous en faites quoi après au juste du nouveau code XML obtenu ? Vous l'enregistrez (méthode save) ou l'affichez (méthode saveXML) au moins ?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Points : 65
    Points
    65
    Par défaut
    J'utilise save :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!$dom->save($fichier_ips)) $bool = false;

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Points : 65
    Points
    65
    Par défaut
    Même avec un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $newip = $dom->createElement('ip', $ip_posteur);
    $newip->setAttribute('date', time());
    $racine->appendChild($newip);
    Mais rien à faire ..

    J'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $newip = $dom->createElement('ip', $ip_posteur);
    $newip->setAttribute('date', time());
    $dom->appendChild($newip);
    et là ça me mettait bien le <ip date="21212">1548.14</ip> mais ça le mettait à la racine ..

    ??

Discussions similaires

  1. [DOM] Erreur sur chargement XML DOM en PHP
    Par samy4972 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 15/04/2013, 21h19
  2. [DOM] Erreur sur appendChild
    Par helter_skelter dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 28/03/2007, 17h36
  3. Réponses: 2
    Dernier message: 21/09/2006, 17h05
  4. [VBS] Erreur sur "AddWindowsPrinterConnection"
    Par Admin dans le forum VBScript
    Réponses: 5
    Dernier message: 27/03/2004, 16h15
  5. Erreur sur le TNSListener après installation de 9iAS
    Par Patmane dans le forum Installation
    Réponses: 4
    Dernier message: 04/02/2004, 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