Problème de boucle foreach PHP-XML [Résolu]

Signaler
Messages postés
63
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
28 juin 2012
-
Messages postés
63
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
28 juin 2012
-
Bonjour à tous voici mon petit soucis

j'ai ce code php

<?php
    $fichier = "news.xml";
$dom = new DOMDocument();
if (!$dom->load($fichier)) {
    die('Impossible de charger le fichier XML');
}

$itemList = $dom->getElementsByTagName('xmlfile');

foreach ($itemList as $item) {
    $titre = $item->getElementsByTagName('titre');
    
    if ($titre->length > 0) 
    {
        echo $titre->item(0)->nodeValue;
    } 
    else 
    {
        echo '(sans titre)';
    }
  
    echo '
'."\n";

    $desc = $item->getElementsByTagName('date');
    if ($desc->length > 0) 
    {
        echo ' '.$desc->item(0)->nodeValue.'

'."\n";
    }
    
    $desc = $item->getElementsByTagName('content');
    if ($desc->length > 0) 
    {
        echo ' '.$desc->item(0)->nodeValue.'
'."\n";
    }
    
    $lien = $item->getElementsByTagName('classeur');
    if ($lien->length >0)
    {
        echo ' ['.$lien->item(0)->nodeValue.'  + (photos, docs,&#8230;)]';
    }

    echo '
'."\n";
}    


et un fichier XML de ce genre

<xmlfile>

<titre>mon titre</titre>
<date>01/01/10</date>
<content>mon content</content>
<classeur>les photos ici</classeur>


<titre>mon titre 2</titre>
<date>02/01/10</date>
<content>mon content le retour</content>
<classeur>les photos ici</classeur>

</xmlfile>


et malheureusement quand je charge ma page php il ne m'affiche que la 1er série de balise (mon titre,01/01/10,...) et pas la 2e série (mon titre 2,02/01/10,...). Pourtant il y à bien un "foreach" et je ne vois pas d'ou peut provenir mon érreur ?

si quelqu'un à une suggestion je suis preneur :)

2 réponses

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
Salut,

Le comportement de ton script est tout à fait normal, puisque tu n'as qu'une seule balise <xmlfile>.
La doc l'indique pourtant clairement :
DOMDocument::getElementsByTagName — Cherche tous les éléments qui ont le nom de balise donné


XML est un langage de description de données. Un document XML doit donc (même si ce n'est pas obligatoire dans les spécifications du format) proposer une hiérarchie claire, par exemple :
<xmlfile>
<element id="1">
  <titre>mon titre</titre>
  <date>01/01/10</date>
  <content>mon content</content>
  <classeur>les photos ici</classeur>
</element>
<element id="2"
  <titre>mon titre 2</titre>
  <date>02/01/10</date>
  <content>mon content le retour</content>
  <classeur>les photos ici</classeur>
</element>
</xmlfile>


Le code PHP pour boucler :

$itemList = $dom->getElementsByTagName('element');
foreach ($itemList as $item) {
...
}


--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
Messages postés
63
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
28 juin 2012

tous à fait correcte merci