PHP Conference Nagoya 2025

DOMNode::appendChild

(PHP 5, PHP 7, PHP 8)

DOMNode::appendChildListenin sonuna yeni bir çocuk ekler

Açıklama

public DOMNode::appendChild(DOMNode $yeni): DOMNode|false

Listeye yeni bir çocuk ekler; liste yoksa oluşturulur. Çocuk DOMDocument::createElement(), DOMDocument::createTextNode() gibi yöntemlerle oluşturulabileceği gibi oluşturulmuş diğer düğümlerden biri de olabilir.

Mevcut bir düğüm, kullanıldığında taşınır.

Bağımsız Değişkenler

yeni

Listeye eklenecek çocuk.

Dönen Değerler

Eklenen düğüm veya hata durumunda false.

Hatalar/İstisnalar

DOM_NO_MODIFICATION_ALLOWED_ERR

Düğüm salt okunursa veya düğümün önceki ebeveyni salt okunur olarak yerleştirilmişse bu hata oluşur.

DOM_HIERARCHY_REQUEST_ERR

Düğüm, yeni düğümün türündeki çocuk düğümlere izin vermeyen türde ise veya yeni düğüm, çocuğu olacağı düğümün ebeveyni veya atalarından biri ise bu hata oluşur.

DOM_WRONG_DOCUMENT_ERR

Eğer yeni düğüm, çocuğu olacağı düğümü oluşturan belgeden farklı bir belge tarafından oluşturulmuşsa bu hata oluşur.

Örnekler

Aşağıdaki örnekte yeni bir belgeye yeni bir eleman düğümü eklenmektedir.

Örnek 1 - Bir çocuk düğüm eklemek

<?php

$doc
= new DOMDocument;

$node = $doc->createElement("para");
$newnode = $doc->appendChild($node);

echo
$doc->saveXML();
?>

Örnek 2 - Çocuk ve torun düğümler

<?php

$doc
= new DOMDocument;

$headNode = $doc->createElement("head");
$doc->appendChild($headNode);

$titleNode = $doc->createElement("title");
$headNode->appendChild($titleNode);

echo
$doc->saveXML();
?>

Ayrıca Bakınız

add a note

User Contributed Notes 4 notes

up
19
krisdover at hotmail dot com
16 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.

<?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 Dover
up
8
cweiske at php dot net
7 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:

<?php
$children
= [];
foreach (
$elemWithChildren->childNodes as $child) {
$children[] = $child;
}
foreach (
$children as $child) {
$targetElement->appendChild($child);
}
?>
up
3
frame at dynamiccreated dot de
14 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.
up
3
jrtayloriv at gmail dot com
16 years ago
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>
To Top