Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/10/2007, 13h33   #1
Membre confirmé
 
Avatar de zulad
 
Inscription : juin 2007
Messages : 505
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 505
Points : 292
Points : 292
Par défaut [DOM] removeChild arrête ma boucle

hello,

Quelqu'un pourrait me dire pourquoi ceci termine la boucle ?

Code :
1
2
 
$subNode->parentNode->removeChild($subNode);
J'ai exactement la même fonction en php4 qui ne pose aucun problème ...

Code :
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
 
  // remove all the outdated child nodes
  // input  nodes
  // output  none
  function removeOutdated($nodes,$date)
  {//
   foreach($nodes as $subNode)
   {//
    if($subNode->nodeType==1)
    {// > if node element
     if($subNode->getAttribute('dateStartEfficacy'))
     {
      $dateStartEff = explode(' ',$subNode->getAttribute('dateStartEfficacy'));
      //$dateEndEff = explode(' ',$subNode->getAttribute('dateEndEfficacy'));
      if($dateStartEff[1]>$date)
      {
# !! c'est ici !!
echo $subNode->nodeName.' '.$subNode->getAttribute("num").'<hr/>';
       //$subNode->parentNode->removeChild($subNode);
      }
     }
     else
     { // if no date start efficacy > remove node
      if($this->checkTag($subNode->nodeName))
      {
       $parent=$subNode->parentNode;$parent->removeChild($subNode);
      }
     }
     if($subNode)
     {
      //$this->removeOutdated($subNode->childNodes,$date);
     }
    }//
   }//
  }//
Sans cette ligne ça m'affiche bien tous les noeuds ...
zulad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2007, 15h16   #2
Membre confirmé
 
Avatar de zulad
 
Inscription : juin 2007
Messages : 505
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 505
Points : 292
Points : 292
Pour être plus clair :

Code :
1
2
3
4
5
6
7
 
 
   foreach($nodes as $subNode)
   {//
      $subNode->parentNode->removeChild($subNode);
      echo ++$i.'<hr/>';
   }//
... j'ai plus de 7 noeuds dans la liste et il ne remove que le premier.

Que deviennent les autres ? Pourquoi ma boucle s'arrête ?
zulad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2007, 18h28   #3
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Seule la boucle est terminée (pas le script) ? Avez-vous un message d'erreur ? Par contre j'imagine que ce résultat est normal si vos noeuds entretiennent une filiation (la suppression est récursive donc si le père est supprimée vous ne devriez plus avoir accès à un fils). (en supposant que votre condition est correcte)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2007, 19h38   #4
Membre confirmé
 
Avatar de zulad
 
Inscription : juin 2007
Messages : 505
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 505
Points : 292
Points : 292
les subnodes ont des enfants et aucun parents n'est supprimé. Même la simple boucle du second post se termine après une itération sans donner de message d'erreur.
zulad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 10h29   #5
Membre confirmé
 
Avatar de zulad
 
Inscription : juin 2007
Messages : 505
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 505
Points : 292
Points : 292
Avec la 5.2 il n'y a pas de problèmes. Sur les PHP 5.1.x il faut passer par un tableau.
zulad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h28.


 
 
 
 
Partenaires

Hébergement Web