phpbar.de logo

Mailinglisten-Archive

[php] DOMNode->appendChild() an bestimmte Stelle der Nodelist

[php] DOMNode->appendChild() an bestimmte Stelle der Nodelist

Jens Giessmann jg at handcode.de
Don Aug 18 21:48:52 CEST 2005


Hi Albin,

Danke fuer dein Beispiel, werd ich mir mal genauer anschauen.

Aber kaum war die Mail draussen habe ich auf php.net (wo auch sonst)
genau das gefunden was ich brauche.

Neben 

DOMNode->appendChild()

gibt es ja auch noch 

DOMNode->insertBefore()

Wenn ich also mit Xpath den Parent-Node und den Node vor dem ich den
neuen Node einfuegen will raussuche geht es ganz einfach.

Hier meine Loesung:

Es soll zwischen child 1 und 2 ein neuer Node eingefuegt werden.
----------------------------------------------------------------------
<?xml version="1.0" encoding="ISO-8859-1" ?>     
<root> 
  <parent> 
    <child nr="1"/> 
    <child nr="2"/> 
  </parent> 
</root> 
----------------------------------------------------------------------

Hier der Code:
----------------------------------------------------------------------
<?php 
 
$xml_src = 'test.xml'; 
 
// Xpath-Querys 
$parent_path = "//parent"; 
$next_path = "//parent/child[@nr='2']"; 
 
// Create a new DOM document 
$dom = new DomDocument(); 
$dom->load($xml_src); 
 
// Find the parent node 
$xpath = new DomXPath($dom); 
 
// Find next Child 
$parent = $xpath->query($parent_path); 
 
$next = $xpath->query($next_path); 
 
// Create the new element 
$element = $dom->createElement('neuernode'); 
 
// Insert the element before a Child 
$parent->item(0)->insertBefore($element, $next->item(0)); 
 
echo $dom->saveXML(); 
 
?> 
----------------------------------------------------------------------

Ergibt genau was ich brauche. 

Das packe ich jetzt noch so in eine Funktion/Methode, dass wenn ich
einen Node dazwischen haengen will insertBefore() mit 2 Xpath-Pfaden
verwendet wird und sonst eben mit appendChild im Parent einfach hinten
angehaengt wird.

-- 

Gruss Jens

php::bar PHP Wiki   -   Listenarchive