boucle DomXML

Le
Nicolas Poulain
Bonjour à tous,

J'ai un problème avec le code suivant dont la boucle ne déplace pas tous
les noeuds comme je le souhaiterais puisqu'elle bloque après le
déplacement du premier noeud :

<?php
$doc = new DOMDocument();
$doc->loadXML("<book><chap1><parA/><parB/></chap1><chap2/></book>");
$bar = $doc->documentElement->firstChild;
$bump = $doc->documentElement->lastChild;
foreach ($bar->childNodes as $n) {
$bump->appendChild($n);
};
print $doc->saveXML();
?>

produit :
<?xml version="1.0"?>
<book><chap1><parB/></chap1><chap2><parA/></chap2></book>

et non :
<?xml version="1.0"?>
<book><chap1></chap1><chap2><par1/><par2/></chap2></book>


Merci d'avance.

--
Nicolas Poulain
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Mickael Wolff
Le #16795621
Nicolas Poulain a écrit :
J'ai un problème avec le code suivant dont la boucle ne déplace pas tous
les noeuds comme je le souhaiterais puisqu'elle bloque après le
déplacement du premier noeud :



Tu fais une erreur de conception. Un document DOM est un arbre, pas
une liste chaînée. La conséquence en est que pour parcourir tout les
nœuds, il faut parcourir récursivement les nœuds enfants des nœuds
enfants (s'il y en a).


<?php
$doc = new DOMDocument();
$doc->loadXML("<book><chap1><parA/><parB/></chap1><chap2/></book>");
$bar = $doc->documentElement->firstChild;
$bump = $doc->documentElement->lastChild;
foreach ($bar->childNodes as $n) {
$bump->appendChild($n);



Tu ne demandes pas au enfants s'ils ont des enfants ?

};
print $doc->saveXML();
?>



Pour illustration :

<?php

function disp_node(DOMNode $node, $deep=0)
{
$out = sprintf("%sNode(%s)n"
, str_repeat("t", $deep)
, $node->nodeName) ;

if($node->hasChildNodes())
foreach($node->childNodes as $child)
$out .= disp_node($child, $deep+1) ;

return $out ;
}

$doc = new DOMDocument();
$doc->loadXML("<book><chap1><parA/><parB/></chap1><chap2/></book>");

echo disp_node($doc) ;

?>


--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Publicité
Poster une réponse
Anonyme