PDA

Просмотр полной версии : insertBefore


Mr. Fixit
07.11.2007, 09:24
$Content = $SubMain->insertBefore($xmlDoc->createElement('Content'), $SubMain->firstChild);
так добавляет вначало, как мне добится добавления в заданную область?
пробую никак не получается... :)

Mnilionic
07.11.2007, 21:24
$Content = $SubMain->insert_before($xmlDoc->create_element("content"), $SubMain);

нужно чтоб $SubMain был ПОСЛЕ заданной области :)

Mr. Fixit
07.11.2007, 22:30
тоесть?
зы: синтаксис правильный у меня... пхп5

Mnilionic
07.11.2007, 22:54
что не понятно?
у вас написано вставитьПеред($SubMain->firstChild)
соответственно, то что вставиться станет первым чайлдом

если вам нужно вставить его между третим и четвёртым, то и нужно вставлять перед чётвертым

Mr. Fixit
07.11.2007, 22:57
ну я хочу создать ветку в середине после третего нода, как мне тогда написать?
что писать во 2м параметре?)

Mnilionic
07.11.2007, 22:58
во втором параметре вам нужно указать ссылку на 4ый нод

Mr. Fixit
08.11.2007, 00:40
ссылка на 4й нод ($SubMain->childNodes[4])?

Mnilionic
08.11.2007, 00:54
вот пример

<?php
function xml2str($dom, $format = false, $shield = false){
$str = $dom->dump_mem($format);
if($shield)
$str = htmlspecialchars( $str );
return $str;
}


// изначальный xml
$str =<<<XML
<x>
<y n="1"/>
<y n="2"/>
<y n="3"/>
</x>
XML;

$dom = domxml_open_mem($str);
$root = $dom->document_element();

// выводим изначальный xml
print "<pre>".xml2str($dom, 1, 1)."</pre>";

получаем ссылку на нужный нод перед которым вставлять будем
$y = $root->first_child();
$y = $y->next_sibling();
$y = $y->next_sibling();
$y = $y->next_sibling();

// вставляем
$node = $y->insert_before($dom->create_element("hi"), $y);

// выводим что получилось
print "<pre>".xml2str($dom, 1, 1)."</pre>";
?>