XML реформирование с DOM - PullRequest
1 голос
/ 13 апреля 2011

Я пытаюсь переформатировать 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(); 

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

Ответы [ 2 ]

3 голосов
/ 13 апреля 2011

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

0 голосов
/ 13 апреля 2011
$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>

Посмотреть .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...