2010-10-20 8 views
0

Disons que je dois les documents xml:Insérer un élément XML à partir d'un document XML à un autre document xml

<first_root> 
    <element1/> 
    <element2> 
    <embedded_element/> 
    </element2> 
</first_root> 

et

<foo> 
    <bar/> 
</foo> 

Comment puis-je mettre ce deuxième doc xml dans le premier un, en utilisant php et DomDocument ou SimpleXML?

Je veux que ça ressemble à quelque chose comme ceci:

<first_root> 
    <element1/> 
    <element2> 
    <foo> 
     <bar/> 
    </foo> 
    <embedded_element/> 
    </element2> 
</first_root> 

Répondre

2

Vous pouvez le faire en utilisant DOMDocument:

<?php 

$aDoc = DOMDocument::loadXML('<?xml version="1.0" encoding="UTF-8" ?> 
<first_root> 
    <element1/> 
    <element2> 
    <embedded_element/> 
    </element2> 
</first_root>'); 

$bDoc = DOMDocument::loadXML('<?xml version="1.0" encoding="UTF-8" ?> 
<foo> 
    <bar/> 
</foo>'); 

$aEmbeddedElement = $aDoc->getElementsByTagName('embedded_element')->item(0); 

$bFoo = $bDoc->documentElement; 

$aImportedFoo = $aDoc->importNode($bFoo,true); 

$aEmbeddedElement->insertBefore($aImportedFoo); 

echo $aDoc->saveXML(); 
?> 

Ici, j'importé le XML dans DOMDocument s, alors je pris le premier Occurrence embedded_element et foo. Après avoir importé profondémentfoo dans le premier document. Maintenant vous pouvez insérer foo avant embedded_element.

c'est évidemment le cas heureux ...

Documentation: DOM

Avec SimpleXML vous pouvez accomplir cela en construisant un troisième document basé sur les deux premières parce que vous ne pouvez pas ajouter SimpleXMLElement dans d'autres . (Ou peut-être que vous pouvez, mais il y a quelque chose que je n'ai pas eu)