DomDocument Как добавить к вновь добавленному дочернему элементу в createDocumentFragment? - PullRequest
0 голосов
/ 04 августа 2020

Привет, я хотел знать, как добавить тег XML к только что созданному добавленному дочернему узлу?

Вот что у меня есть,

$newNode = $xml->createDocumentFragment();
$reCreateOldNode = $xml->createElement("myNewChild");
$newNode->appendChild($reCreateOldNode);         // This is Newly Appended Child
   while ($node->firstChild) {
     $match->nodeValue = "";
     $newNode->appendChild($node->firstChild);
     $newNode->appendXML($actionOutput);        // I want to Append the XML to $newNode->myNewChild
   }
$node->parentNode->replaceChild($newNode, $node);

Это недавно созданный Ребенок,

$newNode->appendChild($reCreateOldNode);  

И я хочу добавить XML, который я создал, к $newNode->myNewChild не на $newNode напрямую,

Спасибо,

1 Ответ

1 голос
/ 05 августа 2020

Фактическая цель фрагмента документа - позволить вам рассматривать список узлов (элементы, текстовые узлы, комментарии ...) как один узел и использовать их в качестве аргумента для методов DOM. Вы хотите добавить только один узел (и его потомков) - не нужно добавлять этот узел к фрагменту.

В PHP фрагмент документа может анализировать строку фрагмента XML. Таким образом, вы можете использовать его для анализа строки как фрагмента XML, а затем добавить его к узлу DOM. Этот фрагмент будет добавлен к новому узлу.

$document = new DOMDocument();
$document->loadXML('<old>sample<foo/></old>');
$node = $document->documentElement;

// create the new element and store it in a variable
$newNode = $document->createElement('new');
// move over all the children from "old" $node
while ($childNode = $node->firstChild) {
    $newNode->appendChild($childNode);
}

// create the fragment for the XML snippet
$fragment = $document->createDocumentFragment();
$fragment->appendXML('<tag/>text');

// append the nodes from the snippet to the new element
$newNode->appendChild($fragment);

$node->parentNode->replaceChild($newNode, $node);

echo $document->saveXML();

Вывод:

<?xml version="1.0"?>
<new>sample<foo/><tag/>text</new>
...