Mailinglisten-Archive |
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