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] Affichage d'une balise XML


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut [DOM] Affichage d'une balise XML
    Bonjour à tous,
    je suis en train de concevoir un script qui permet d'écrire un document sur un fichier xml avec dom (j'ai trop de problèmes avec simplexml).
    Pour l'instant, je suis arrivé à écrire toutes les données sur un fichier xml mais pour afficher, j'ai un problème.
    Dans le fichier xml, <document> est la balise racine.
    Dans <document>, il y a deux balises <title> (c'est pour une fonctionnalité prochaine) et quand j'affiche une des deux, j'obtiens un message d'erreur:

    Fatal error: Call to a member function item() on a non-object in C:\xampp\htdocs\esao\dina.php on line 41

    Le print_r ne m'affiche que DOMDocument Object ( ) (il n'y a rien à l'intérieur de l'objet).

    Voici mon code 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?php
    $dom = new DOMdocument('1.0', 'iso-8859-1');
    $racine = $dom->createElement('document');
    $racine = $dom->appendChild($racine);
     
    $title = $dom->createElement('title');
    $title = $racine->appendChild($title);
     
    $title1 = $dom->createTextNode($_POST['title']);
    $title1 = $title->appendChild($title1);
     
    $titl = $dom->createElement('title');
    $titl = $racine->appendChild($titl);
     
    $titl1 = $dom->createTextNode($_POST['title']);
    $titl1 = $titl->appendChild($titl1);
     
    $text = $dom->createElement('text');
    $text = $racine->appendChild($text);
     
    $text1 = $dom->createTextNode($_POST['text']);
    $text1 = $text->appendChild($text1);
     
    $time = $dom->createElement('created');
    $time = $racine->appendChild($time);
     
    $time1 = $dom->createTextNode(date("d-n-Y/H:i:s"));
    $time1 = $time->appendChild($time1);
     
    $dom->formatOutput = true;
     
    $dom->save('doc2.xml');
     
    echo $dom->title->item(0);
    echo $dom->title->item(0);
    print_r($dom);
    ?>
    Le fichier xml est celui-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="iso-8859-1"?>
    <document>
      <title></title>
      <title></title>
      <text></text>
      <created>29-3-2008/18:59:00</created>
    </document>
    Si quelqu'un pourrez m'aider, ça serait sympa .
    Merci d'avance

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $dom->title->item(0);
    echo $dom->title->item(0);
    Où avez-vous vu qu'un objet DomDocument possédait une propriété title ? Et l'extension DOM ne s'utilise pas comme SimpleXML. (un environnement de développement bien configuré devrait par ailleurs générer une erreur de type warning)

    Il faut d'abord passer par la méthode getElementsByTagName, par exemple, pour atteindre vos éléments title.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Donc pour faire un echo d'une balise, je dois d'abord faire un getElementsByTagName puis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $dom->title->item(0);
    echo $dom->title->item(1);
    .
    Si c'est pas cela,pouvez-vous me montrer un bout de code pour le faire.

  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
    S'ils sont créés dans le même script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $title = $dom->createElement('title');
    $title = $racine->appendChild($title);
     
    $title1 = $dom->createTextNode($_POST['title']);
    $title1 = $title->appendChild($title1);
     
    $titl = $dom->createElement('title');
    $titl = $racine->appendChild($titl);
     
    $titl1 = $dom->createTextNode($_POST['title']);
    $titl1 = $titl->appendChild($titl1);
    Il n'y a pas lieu de chercher bien loin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $title->nodeValue;
    echo $titl->nodeValue;
    Sinon, une méthode parmi d'autres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $titles = $dom->getElementsByTagName('title');
    foreach ($titles as $t) {
        echo $t->nodeValue . '<br />';
    }
    (non testé)

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci mais si je loade mon fichier xml plus tard (donc éventuellemnt pas avec ce fichier php), comment j'affiche les données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $title->nodeValue;
    echo $titl->nodeValue;
    Car là, tu m'as donné un code qui me permet d'afficher les données après avoir créé le fichier mais dans le cas que j'évoque avant, je fais comment ?

  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 777
    Points
    17 777
    Par défaut
    J'ai aussi donné cette solution (bien que je ne l'ai pas testé). Si en revanche vous voulez accéder à votre titre de manière "indexée", c'est possible puisque $titles (cf code plus haut) est un objet DomNodeList (via la méthode item).

Discussions similaires

  1. [Débutant] Documentation XML (<summary>) , affichage d'une "balise" <T>
    Par b_noit dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 04/05/2012, 15h00
  2. Affichage des attributs d'une balise XML
    Par derfez dans le forum Linq
    Réponses: 4
    Dernier message: 07/07/2010, 15h06
  3. Comment récupérer le nom d'une balise XML avec DOM ?
    Par Predatorus26 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 28/05/2010, 16h54
  4. [xsl] mauvaise interprétation du contenu d'une balise XML
    Par Cédric B. dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 27/01/2006, 13h59
  5. [JDOM] données un attribut à une balise xml
    Par noobiewan kenobi dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 09/07/2004, 16h54

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