PHP DOMDocument: можно ли повторно использовать текстовый узел?

У меня есть следующий код:

    $doc = new \DOMDocument('1.0', 'UTF-8');
$doc->formatOutput = true;

$element = $doc->createElement('ROOT');
$root = $doc->appendChild($element);

$textNode = $doc->createTextNode('I should be in both nodes');


$element = $doc->createElement('FIRST');
$first = $root->appendChild($element);
$first->appendChild($textNode);

$element = $doc->createElement('SECOND');
$second = $root->appendChild($element);
$second->appendChild($textNode);


var_dump($doc->saveXML($root));

Что я не понимаю, так это то, почему

<ROOT>
<FIRST/>
<SECOND>I should be in both nodes</SECOND>
</ROOT>

Почему первый элемент не содержит текст? ВТОРОЙ украл его? 🙂 Потому что, если я удаляю часть кода, создающую ВТОРОЙ элемент, ПЕРВЫЙ получает свой текстовый узел, как и ожидалось.

1

Решение

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

Вы можете легко клонировать узел, используя cloneNode(), но как видно из названия — это не тот же узел, а копия. Если вы измените следующую строку на …

$first->appendChild($textNode->cloneNode(true));

Ты получишь…

<ROOT>
<FIRST>I should be in both nodes</FIRST>
<SECOND>I should be in both nodes</SECOND>
</ROOT>
1

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector