What's not mentioned here is that DOMNode::appendChild() can also be used to move an existing node to another part of the DOMDocument, e.g.
<?php
$doc = new DOMDocument();
$doc->loadXML("<foobar><bar/><foo/></foobar>");
$bar = $doc->documentElement->firstChild;
$foo = $doc->documentElement->lastChild;
$foo->appendChild($bar);
print $doc->saveXML();
?>
This produces:
<?xml version="1.0"?>
<foobar><foo><bar/></foo></foobar>
Note that the nodes "<foo/>" and "<bar/>" were siblings, i.e. the first and last child of "<foobar>" but using appendChild() we were able to move "<bar/>" so that it is a child of "<foo/>".
This saves you the trouble of doing a DOMNode::removeChild($bar) to remove "<bar/>" before appending it as a child of "<foo/>".
Kris DoverDOMNode::appendChild
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
DOMNode::appendChild
Референца за `domnode.appendchild.php` со подобрена типографија и навигација.
DOMNode::appendChild
класата mysqli_driver
DOMNode::appendChild — Додава нов потомок на крајот од потомците
= NULL
Додава нов потомок на крајот од потомците Оваа функција додава потомок на постоечка листа на потомци или создава нова листа на потомци. Потомок може да се создаде со на пр., DOMDocument::createElement() DOMDocument::createTextNode()
Кога користите постоечки јазол, тој ќе биде преместен.
Параметри
node-
итн. или едноставно со користење на кој било друг јазол.
Вратени вредности
Додадениот потомок. false при грешка.
Errors/Exceptions
Може да фрли DOMException со следните кодови за грешки:
DOM_NO_MODIFICATION_ALLOWED_ERR-
Покренато ако овој јазол е само за читање или ако претходниот родител на јазолот што се вметнува е само за читање.
DOM_HIERARCHY_REQUEST_ERR-
Покренато ако овој јазол е од тип што не дозволува деца од типот на
nodeјазол, или ако јазолот што треба да се додаде е еден од предците на овој јазол или самиот овој јазол. DOM_WRONG_DOCUMENT_ERR-
Покренато ако
nodeе создаден од различен документ од оној што го создал овој јазол.
Примери
Јазолот додаден или
Следниот пример ќе додаде нов јазол на елемент во нов документ.
<?php
$doc = new DOMDocument;
$node = $doc->createElement("para");
$newnode = $doc->appendChild($node);
echo $doc->saveXML();
?>
Пример #1 Додавање потомок
<?php
$doc = new DOMDocument;
$headNode = $doc->createElement("head");
$doc->appendChild($headNode);
$titleNode = $doc->createElement("title");
$headNode->appendChild($titleNode);
echo $doc->saveXML();
?>Види Исто така
- Пример #2 Вгнездени потомци DOMChildNode::after()
- - Додава јазли по јазолот DOMNode::insertBefore()
- - Ги заменува податоците од карактери со нови јазли - Отстранува дете од списокот на деца
- - Го отстранува јазолот DOMNode::replaceChild()
Белешки од корисници 4 белешки
If you want to move the children of one node to another, you cannot simply iterate on $element->childNodes - you have to make an array first:
<?php
$children = [];
foreach ($elemWithChildren->childNodes as $child) {
$children[] = $child;
}
foreach ($children as $child) {
$targetElement->appendChild($child);
}
?>Aware dealing with DOMNodeList and appendChild() on the same Node.
If you want to replace only the children not the DOMElement itself you probably foreach childNodes-property or get the DOMElements with a for-loop and item()-method of the DOMNodeList.
You will fail if you not clone the received single DOMElement. Actually the count of the DOMNodelist will be decreased on appendChild count but appendChild seems to refer to the old Nodelist and nothing visible will happen. Cloning will help.If you want to create nested DOM elements:
<?php
$doc = new DOMDocument();
$foo = $doc->createElement("foo");
$doc->appendChild($foo);
$bar = $doc->createElement("bar");
$foo->appendChild($bar);
$bazz = $doc->createElement("bazz");
$foo->appendChild($bazz);
echo $doc->saveXML();
?>
Is equivalent to:
<foo>
<bar></bar>
<bazz></bazz>
</foo>