Подскажите как скопировать часть XML-дерева?

Milagro

Новичок
Подскажите как скопировать часть XML-дерева?

Как по простому скопировать часть XML-дерева со всеми его дочерними узлами?

Например из

<book>
<chapter>
<para/>
<chapter>
</book>

получить

<book>
<chapter>
<para/>
<chapter>
<chapter>
<para/>
<chapter>
</book>

Пробовал эксперименты с DomNode->insert_before, результат никакой.
 

slach

Новичок
делай DOMNode->cloneNode(true)
а потом уже appendChild к нужной ноде получившегося фрагмента
 

Milagro

Новичок
Не понял.

Давай так:
$dom - это весь документ
$node - это фрагмент (поддерево) <chapter>

Что клонировать и куда потом аппендить?
 

slach

Новичок
$newNode = $node->cloneNode(true); //true - это deep, т.е. со всеми вложенными нодами

$dom->.... тут нода к КОТОРОЙ надо скопировать->appendChild($newNode);
 

Alexandre

PHPПенсионер
а вот если усложнить задачу
и необходимо скопировать в другой Дом объект?
 

slach

Новичок
2Alexande
у склонированной ноды сначала надо ownerDocument поменять
а потом сделать appendChild к ноде другого документа

bgm
автор топика хочет скопировать часть дерева
в другое место, а александр в другой документ
и там и там сначала делается cloneNode(true) и потом уже манипуляции с документом
 

bgm

&nbsp;
Автор оригинала: slach
автор топика хочет скопировать часть дерева
в другое место, а александр в другой документ
и там и там сначала делается cloneNode(true) и потом уже манипуляции с документом
Собственно ведь надо понять - что и куда копируется, представить себе последовательность действий (в голове или на бумаге), а все необходимые инструменты есть. Но вот сначала думать и только потом делать - это не модно.
 
Сверху