simpleXMLでXML文字列を要素に追加するには

SimpleXMLで要素の置き換え(テキスト)は簡単にできるが、要素をXML文字列で置き換えすることはできない。
XMLのテキストに変換されてしまう。

また、SimpleXML要素同士でマージや、要素の追加もできない。
なので、XML文字列をSimpleXML要素にしても置き換え出来ない。

SimpleXMLの実体はXMLDocumentへの参照なので、一旦XMLDocumentに変換してから
XMLDocumentで要素の追加を行う。

SimpleXMLの実体はXMLDocumentへの参照なので、XMLDocument側での変更はSimpleXMLの方にも反映される。

  • html bodyの書き換え
<?php
$xml->body='test';
<?php
$html="<ul><li>test</li></ul>";
$dom = new DOMDocument;
@$dom->loadXML('<?xml version="1.0" encoding="UTF-8"?>'.file_get_contents('index.html'));
$xml = simplexml_import_dom($dom);
//$xml->body='test';
$domBody = dom_import_simplexml($xml->body);
$domAdd  = dom_import_simplexml(simplexml_load_string($html));
$domAdd  = $domBody->ownerDocument->importNode($domAdd,True);
$domBody->appendChild($domAdd);

@$dom=dom_import_simplexml($xml)->ownerDocument;
$dom->formatOutput = true;
echo preg_replace('/<\?xml[^>]+\?>/im','<!DOCTYPE html>',$dom->saveXML());