PHP — добавить DOMNode несколько раз

Пожалуйста, позвольте мне сначала объяснить следующую ситуацию.
У меня есть эта разметка, служащая моим шаблоном:

<div class="container">
<div class="item"></div>
</div>

Теперь я хочу просто захватить узел «.item», скопировать его, добавить к нему какое-то значение и добавить его в «.container» (его родитель). И повторите этот процесс несколько раз. Вот как должен выглядеть результат:

<div class="container">
<div class="item">Happy</div>
<div class="item">New</div>
<div class="item">Year</div>
<div class="item">2015</div>
</div>

Я сделал это с помощью следующего кода:

$child = $node->childNodes->item(0);
$refNode = $child;
$template = $child->cloneNode(true);

for($i=0; $i < 4; $i++){
$refNode = ($node->lastChild === $child)?
$node->appendChild($child):
$node->insertBefore($child, $refNode->nextSibling); # (newNode, refNode)

$refNode->nodeValue = walk($data);
$child = $template->cloneNode(true);
}

function walk(&$array){
$item = current($array); next($array); return $item;
}

Это отлично работает. Тем не менее, я не удовлетворен этим кодом.

Я ожидал, что это можно сделать более простым способом, примерно так:

$refNode = $node->childNodes->item(0)->cloneNode(false); # copy the child node
$node->nodeValue = null; # empty the container

for($i=0; $i < 4; $i++){
$refNode->nodeValue = walk($data); # assign value to the reference node
$node->appendChild( $refNode ); # append
}

Это, к сожалению, не работает.

Итак, мой вопрос: есть ли более простой и элегантный способ сделать это?

РЕДАКТИРОВАТЬ

Хорошо, это будет работать:

$child = $node->childNodes->item(0); # copy the child before removing
$refNode = $child; # make a reference
$node->nodeValue = null; # empty parent

for($i=0; $i < 4; $i++){
$refNode->nodeValue = walk($data); # assign value to reference node
$child = $refNode->cloneNode(true); # copy reference node
$node->appendChild($child); # append to parent
}

Хотя я все еще не совсем уверен, почему я просто не могу повторно добавить дочерний узел. Может быть, потому что это уже добавлено, поэтому больше не доступно для добавления, и именно поэтому я должен сделать ссылочный узел?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …