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