2010-10-20 1 views
0

Допустим, у меня есть к XML-документов:Вставьте XML-элемент из XML-документ на другой XML-документ

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

и

<foo> 
    <bar/> 
</foo> 

Как я могу поставить этот второй XML-документ в первый один, используя php и DomDocument или SimpleXML?

Я хочу, чтобы это выглядело как что-то вроде этого:

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

ответ

2

Вы можете сделать это с помощью 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(); 
?> 

Здесь я импортировал XML в DOMDocument с, тогда я взял первый embedded_element появление и foo узел. После того, как вы должны импортировать глубокоfoo в первый документ. Теперь вы можете вставить foo до embedded_element.

Очевидно, что это только счастливый случай ...

Документация: DOM

С SimpleXML вы можете сделать это путем создания третьего документа на основе первых двух, потому что вы не можете добавить SimpleXMLElements в другие , (Или, может быть, вы можете, но есть кое-что, чего я не смог получить)