Problème de boucle foreach PHP-XML

Résolu
10demon10 Messages postés 63 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 28 juin 2012 - 29 déc. 2009 à 19:47
10demon10 Messages postés 63 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 28 juin 2012 - 30 déc. 2009 à 13:29
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

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
30 déc. 2009 à 03:02
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à ;)
3
10demon10 Messages postés 63 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 28 juin 2012
30 déc. 2009 à 13:29
tous à fait correcte merci
0