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

10demon10 63 Messages postés vendredi 23 avril 2004Date d'inscription 28 juin 2012 Dernière intervention - 29 déc. 2009 à 19:47 - Dernière réponse : 10demon10 63 Messages postés vendredi 23 avril 2004Date d'inscription 28 juin 2012 Dernière intervention
- 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 :)
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
neigedhiver 2492 Messages postés jeudi 30 novembre 2006Date d'inscription 14 janvier 2011 Dernière intervention - 30 déc. 2009 à 03:02
3
Merci
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à ;)

Merci neigedhiver 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de neigedhiver
10demon10 63 Messages postés vendredi 23 avril 2004Date d'inscription 28 juin 2012 Dernière intervention - 30 déc. 2009 à 13:29
0
Merci
tous à fait correcte merci
Commenter la réponse de 10demon10

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.