PHP 7.4.9 Released!


(PHP 5, PHP 7)

DOMNode::insertBefore Ajoute un nouveau fils avant le noeud référencé


public DOMNode::insertBefore ( DOMNode $newnode [, DOMNode $refnode ] ) : DOMNode

Cette fonction insère un nouveau noeud juste avec le noeud de référence. Si vous comptez faire des modifications plus tard sur l'enfant ajouté, vous devez utiliser le noeud retourné.

Liste de paramètres


Le nouveau noeud.


Le noeud référencé. Si non spécifié, newnode sera ajouté au fils.

Valeurs de retour

Le noeud inséré.

Erreurs / Exceptions


Lancé si le noeud est en lecture seule ou si le parent précédent le noeud à insérer est en lecture seule.


Lancé si ce noeud est d'un type qui n'autorise pas de fils du type du noeud newnode, ou si le noeud à ajouter est un des ancêtres de ce noeud ou ce noeud lui-même.


Lancé si newnode a été créé depuis un document différent que celui qui a créé ce noeud.


Lancé si refnode n'est pas un fils de ce noeud.

Voir aussi

add a note add a note

User Contributed Notes 5 notes

jarry1250 at gmail dot com
5 years ago
Note that supplying the same node for $newnode and $refnode leads to an E_WARNING ("Couldn't add newnode as the previous sibling of refnode"). For example imagine one wanted to make $newnode the first child of its parent by doing:

= $newnode->parentNode->firstChild;
// Bad:
$newnode->parentNode->insertBefore( $newnode, $firstSibling );

This would generate a warning if it already was the first child of its parent, since $newnode and $firstSibling are identical. Easy to work around though:

= $newnode->parentNode->firstChild;
// Better:
if( $newnode !== $firstSibling ) {
$newnode->parentNode->insertBefore( $newnode, $firstSibling );
Jerry Ellis
15 years ago
1st argument) a node to insert
2nd argument) a reference node - this is the node that the new node will be inserted before

The trick to using this method is that the OBJECT on which you actually CALL the insertBefore() method is actually the PARENT node of the reference node! 

$DOMNode_refNode->insertBefore($DOMNode_newNode, $DOMNode_refNode);

$DOMNode_refNode->parentNode->insertBefore($DOMNode_newNode, $DOMNode_refNode);
jg at handcode dot de
14 years ago
example to insert <newnode/> between <chid1/> and <child2/>

<?xml version="1.0" encoding="ISO-8859-1" ?>    
    <child nr="1"/>
    <child nr="2"/>


= 'test.xml';

// XPath-Querys
$parent_path = "//parent";
$next_path = "//parent/child[@nr='2']";

// Create a new DOM document
$dom = new DomDocument();

// Find the parent node
$xpath = new DomXPath($dom);

// Find parent node
$parent = $xpath->query($parent_path);

// new node will be inserted before this node
$next = $xpath->query($next_path);

// Create the new element
$element = $dom->createElement('newnode');

// Insert the new element
$parent->item(0)->insertBefore($element, $next->item(0));


DrTebi at Yahoo
12 years ago
Sorry, my previous posting worked only for the top node. Here the corrected version, which will work for any node:

<?xml version="1.0"?>

// load XML, create XPath object
$xml = new DomDocument();
$xml->preserveWhitespace = false;
$xpath = new DOMXPath($xml);

// get node eva, which we will append to
$eva = $xpath->query('/contacts/person[.="Eva"]')->item(0);

// create node john
$john = $xml->createElement('person', 'John');

// insert john after eva
//   "in eva's parent node (=contacts) insert
//   john before eva's next node"
// this also works if eva would be the last node
$eva->parentNode->insertBefore($john, $eva->nextSibling);

// show result
header('Content-Type: text/plain');

<?xml version="1.0"?>
justin at redwiredesign dot com
13 years ago
The previous example is incorrect, and causes a DOM_NOT_FOUND error, as the child nodes are not direct descendants of the root node.

Therefore, the line:

$parent_path = "/root";

needs to change to:

$parent_path = "/root/parent";


$parent_path = "//parent";

for this example to work
To Top