Je déplace du code de SimpleXML vers le DOM de PHP et je ne reçois pas encore les objets.Ajouter des enfants de manière récursive avec l'API DOM de PHP
SimpleXML, par exemple, je peux créer des éléments imbriqués très facilement comme ceci:
$Settings = new SimpleXMLElement("<root></root>");
$Settings->addChild('el1');
$Settings->el1->addChild('el2');
$Settings->el1->el2->addChild('el3');
$Settings->el1->el2->el3->addChild('el4', 'text');
echo("<pre>".htmlspecialchars(str_replace("><", ">\n<",$Settings->asXML()))."</pre>");
// Result
<?xml version="1.0"?>
<root>
<el1>
<el2>
<el3>
<el4>text</el4>
</el3>
</el2>
</el1>
</root>
dans DOM cependant, il semble que je dois soit garder une trace des poignées, ou chercher une liste et une boucle à travers elle afin d'obtenir un DOMElement pour un élément particulier. Il doit y avoir un moyen plus facile que je manque ...
Dites que j'ai le code ci-dessous, et que vous voulez ajouter el1
, el2
, el3
, etc. comme ci-dessus. Quelle est la manière la moins bavarde de faire cela? De préférence sans avoir à avoir une variable en tant que handle pour chaque nœud auquel je veux ajouter un enfant, ou avoir à les récupérer via des boucles.
$DOMXML = new DOMDocument();
$DOMXML->appendChild($DOMXML->createElement('root'));
$DOMXML->documentElement->appendChild($DOMXML->createElement('el1));
// ...
echo($DOMXML->saveXML(););
Utilisez importNode et définissez le second param (deep) sur true, afin de copier récursivement l'arborescence. –