LaravelConf Taiwan 2020 CFP Started


(PHP 5, PHP 7)

DOMNode::appendChild Añade un nuevo hijo al final de los hijos


public DOMNode::appendChild ( DOMNode $newnode ) : DOMNode

Esta función agrega un hijo a una lista existente de hijos o crea una nueva lista de hijos. El hijo se puede crear con, p.ej., DOMDocument::createElement(), DOMDocument::createTextNode() etc. o simplemente usando cualquier otro nodo.



El hijo añadido.

Valores devueltos

El nodo añadido.



Lanzado si este nodo es de sólo lectura o si el padre previo del nodo a ser insertado es de sólo lectura.


Lanzado si este nodo es de un tipo de no permite hijos del tipo del nodo newnode, o si el nodo a añadir es uno de los progenitores del nodo o si es el nodo en sí.


Lanzado si newnode fue creado desde un documento diferente del que creó este nodo.


El siguiente ejemplo añadirá un nuevo nodo elemento a un nuevo documento.

Ejemplo #1 Añadiendo un hijo


= new DOMDocument;

$nodo $doc->createElement("para");
$nuevo_nodo $doc->appendChild($nodo);


Ver también

add a note add a note

User Contributed Notes 4 notes

krisdover at hotmail dot com
11 years ago
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.

= new DOMDocument();
$bar = $doc->documentElement->firstChild;
$foo = $doc->documentElement->lastChild;

This produces:

<?xml version="1.0"?>

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 Dover
cweiske at php dot net
2 years ago
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:

= [];
foreach (
$elemWithChildren->childNodes as $child) {
$children[] = $child;
foreach (
$children as $child) {
jrtayloriv at gmail dot com
12 years ago
If you want to create nested DOM elements:

= new DOMDocument();
$foo = $doc->createElement("foo");

$bar = $doc->createElement("bar");

$bazz = $doc->createElement("bazz");


Is equivalent to:

frame at dynamiccreated dot de
9 years ago
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.
To Top