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());