Jump to content

XML et PHP, je vais craquer.


Recommended Posts

Bonjour,

 

Je travaille actuellement sur un projet où je dois lire un fichier XML (pas de JSON, j'ai besoin des attributs) et mettre ces infos dans un tableau.

<?xml version="1.0" encoding="UTF-8"?><?DOCTYPE test SYSTEM "./test.dtd"?><test>    <a1>        <b>            <date>                14 juillet            </date>            <intitule>                Fête nationale !            </intitule>        </b>        <b>            <date>                24 décembre            </date>            <intitule>                Noël \o/            </intitule>        </b>    </a1>    <a2>            </a2></test>
<?xml version="1.0" encoding="UTF-8"?><!ELEMENT test(a1, a2)><!ELEMENT a1(b*)><!ELEMENT b(date, intitule)><!ELEMENT date(#PCDATA)><!ELEMENT intitule(#PCDATA)><!ELEMENT a2(#PCDATA)>

Mon objectif est de récupérer le premier élément (<a1> et de lire le contenu de <a2> dans une boucle)

J'ai donc :

$dom = new DOMDocument();$dom->load("./inc/test.xml");$elementA1 = $dom->getElementsByTagName("a1");$listeElementsB = $elementA1->getElementsByTagName("b");foreach ($listeElementsB as $B) {    echo $B->firstChild->nodeValue;}

(Je me base sur http://eusebius.developpez.com/php5dom/)

 

Mais rien ne s'affiche :(

 

Et vous connaissez un équivalent de var_dump() pour les données XML ?

Chez moi, ça se contente de dire (par exemple) object(DOMNodeList)[2]. C'est pas très parlant ...

 

Merci !

:inpactitude:

Link to comment
Share on other sites

<?php$dom = new DOMDocument();$dom->load('testxml.xml');$listeA1 = $dom->getElementsByTagName('a1');  foreach($listeA1 as $a1)  {    $listeB = $a1->getElementsByTagName('b');      foreach($listeB as $B)      {        $listeElementsDate = $B->getElementsByTagName('date');        $listeElementsInt = $B->getElementsByTagName('intitule');          foreach($listeElementsDate as $elemDate)          {            echo $elemDate->firstChild->nodeValue."<br>";          }          foreach($listeElementsInt as $elemInt)          {            echo $elemInt->firstChild->nodeValue."<br>";          }      }  }

Voilà, c'est pas opti, mais j'affiche bien le contenu de date et intitule.

J'ai pas regardé, mais si il y a une méthode pour accéder directement à date et intitule ça sera plus simple je pense. Tu trouveras peut être ton bonheur ici

 

Après je sais pas si j'ai bien répondu à ta question, j'ai pas trop compris pour a2.

 

Edit : je pense que le premier foreach est de trop. :transpi:

Link to comment
Share on other sites

J'ai essayé sans le premier foreach() mais j'ai une erreur.

$listeA1 = $dom->getElementsByTagName('a1');$listeB = $listeA1->getElementsByTagName('b');

Merci pour ton aide, je laisse quand même ouvert pour ceux qui veulent optimiser le code ;-)

Link to comment
Share on other sites

  • 2 weeks later...

Désolé pour le retard, difficile de bosser avec la canicule ...

 

SimpleXML semble correspondre à mon besoin. Je termine mon projet et si ça fonctionne bien, je met en résolu :-)

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...