Discussion:
boucle DomXML
(trop ancien pour répondre)
Nicolas Poulain
2008-09-05 11:43:03 UTC
Permalink
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
Mickael Wolff
2008-09-12 15:44:11 UTC
Permalink
Post by Nicolas Poulain
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
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).
Post by Nicolas Poulain
<?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 ?
Post by Nicolas Poulain
};
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
Continuer la lecture sur narkive:
Loading...