ScotlandPHP

DOMNode::appendChild

(PHP 5, PHP 7)

DOMNode::appendChildListenin sonuna yeni bir çocuk ekler

Açıklama

DOMNode DOMNode::appendChild ( DOMNode $yeni )

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.

Değiştirgeler

yeni

Listeye eklenecek çocuk.

Dönen Değerler

Eklenen düğüm.

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();
?>

Ayrıca Bakınız

add a note add a note

User Contributed Notes 3 notes

up
7
krisdover at hotmail dot com
9 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
2
frame at dynamiccreated dot de
6 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
1
jrtayloriv at gmail dot com
9 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