2013-03-08 7 views
1

мне нужно добавить в новый корневой узел к следующему XMLДобавление в новый корневой узел XML

<?xml version="1.0"?> 
<unit> 
<source> 
<id>ANCH02</id> 
<uri>http://www.hamiltonisland.biz/tabid/339/Default.aspx</uri> 
</source> 
</unit> 

стать

<?xml version="1.0"?> 
     <units> 
     <unit> 
     <source> 
     <id>ANCH02</id> 
     <uri>http://www.hamiltonisland.biz/tabid/339/Default.aspx</uri> 
     </source> 
     </unit> 
     </units> 

Как я мог это сделать? Это не похоже, что SimpleXMLElement обладает этой функциональностью. Я также рассмотрел этот пример DomNode http://php.net/manual/en/domnode.insertbefore.php, но он, похоже, не может добавить новый корневой узел.

+0

Пример с 'inserBefore': http://codepad.org/vwAP25St – hakre

ответ

4

Это похоже на работу

$units = $dom->createElement('units'); 
$units->appendChild($dom->documentElement); 
$dom->appendChild($units); 

DEMO

+0

Это прекрасно работает - благодаря! – Franco

1

DOMDocument:

$yourDOMDOMDocument ... <--- already loaded XML 
$doc = new DOMDocument(); 
$doc->appendChild($doc->createElement('Units')); 
$doc->documentElement->appendChild($doc->importNode($yourDOMDocument->documentElement)); 

Или. если у вас есть XML, как SimpleXMLElement уже:

$yourSimpleXML ... <--- already loaded XML 
$doc = new DOMDocument(); 
$doc->appendChild($doc->createElement('Units')); 
$domnode = dom_import_simplexml($yourSimpleXML); 
$doc->documentElement->appendChild($doc->importNode($domnode)); 
//if you want it back as SXE: 
$newSimpleXMLElement = simplexml_import_dom($doc); 
Смежные вопросы