Intereting Posts

XML-реформация с помощью DOM

Я пытаюсь переформатировать XML, добавляя узел промежуточного уровня.

Вот что я имею в качестве входных данных:

<channel> <item> <title>Advanced PHP Book</title> </item> <item> <title>MySQL primer</title> </item> <item> <title>C++ for beginners</title> </item> </channel>

Мне нужно, чтобы это было в конце (узел страницы, добавленный между каналом и элементом):

<channel> <page> <item> <title>Advanced PHP Book</title> </item> <item> <title>MySQL primer</title> </item> <item> <title>C++ for beginners</title> </item> </page> </channel>

Вот мой тестовый код:

 $sxe = simplexml_load_string($string); $dom_sxe = dom_import_simplexml($sxe); $dom = new DOMDocument('1.0'); $channel = $dom->appendChild($dom->createElement('channel')); $page = $channel->appendChild($dom->createElement('page')); $dom_sxe = $dom->importNode($dom_sxe, true); $dom_sxe = $page->appendChild($dom_sxe); $dom->formatOutput = true; echo $dom->saveXML(); 

Проблема в том, что элемент канала удваивается. Пожалуйста помоги.

Я не думаю, что это должно быть слишком сложно: я думаю, что вы чрезмерны с этим, используя материал simplexml .

 $dom = new DOMDocument; $dom->loadXML($string); // create the <page> element $page = $dom->createElement('page'); while ($dom->firstChild->firstChild) { // move the items in <channel> to the <page> element $page->appendChild($dom->firstChild->firstChild); } // insert the <page> element into <channel> $dom->firstChild->appendChild($page); $dom->saveXML(); 
 $xml = '<channel> <item> <title>Advanced PHP Book</title> </item> <item> <title>MySQL primer</title> </item> <item> <title>C++ for beginners</title> </item> </channel>'; $dom = new DOMDocument; $dom->loadXML($xml); $page = $dom->createElement('page'); $items = $dom->getElementsByTagName('item'); while ($items->length) { $page->appendChild($items->item(0)); } $dom->getElementsByTagName('channel')->item(0)->appendChild($page); echo $dom->saveXML(); 

Вывод

 <?xml version="1.0"?> <channel> <page><item> <title>Advanced PHP Book</title> </item><item> <title>MySQL primer</title> </item><item> <title>C++ for beginners</title> </item></page></channel> 

Смотрите .