# XML-Node löschen



## mackattack (5. Juli 2005)

Hallo,

ich brauche nochmal Hilfe zum Thema XML
Und zwar habe ich ein XML-Dokument mit der folgenden Struktur:


```
<?xml version="1.0"?>
<eintraege>
	<eintrag>
		<ID>1</ID>
		<Name>Firma 1</Name>
		<www>URL1</www>
	</eintrag>
	<eintrag>
		<ID>2</ID>
		<Name>Firma 2</Name>
		<www>URL2</www>
	</eintrag>
	<eintrag>
		<ID>3</ID>
		<Name>Firma 3</Name>
		<www>URL3</www>
	</eintrag>
</eintraege>
```

Wie muss ich vorgehen, um z.B. den Eintrag mit der ID 2 zu löschen? Ich habe es schon mit DOM und removeChild probiert, aber irgendwie krieg ich nix hin. 
Es ist mir relativ wurscht, ob ich das mit DOM, simpleXML oder irgendwas anderem geregelt krieg, hauptsache es läuft .

Also, ich wäre euch echt dankbar, wenn ihr mir helfen könnt.

Besten Dank im Vorraus!


----------



## mackattack (5. Juli 2005)

Vielleicht bringts ja was, wenn ich nochmal ein paar weitere Infos poste.

Das Problem ist, dass das bei mir alles etwas komplizierter ist und in ner Funktion läuft. Die Struktur der XML ist auch nur vom Prinzip her so wie die obere. Aber dennoch, ich poste mal die Funktion:


```
function Delete($katID, $ID)
{
	$fileName = "ref_kat".$katID.".xml";
	$filePath = "../Flash/data/";
	$file = $filePath.$fileName;

	$doc = DOMDocument::load($file);
	$xp = new domxpath($doc);
	
	$elements = $doc->getElementsByTagName("eintrag"); 
	$element = $elements->item(0);
	
	$children = $doc->documentElement->childNodes->item($ID);
	$child = $element->removeChild($children);

				
	$doc->save($file);
}
```

und hier die wirkliche XML-Struktur:


```
<?xml version="1.0"?>
<referenzen>
	<eintrag>
		<ID>1</ID>
		<Firmenname>Firmenname1</Firmenname>
	</eintrag>
        <eintrag>
		<ID>2</ID>
		<Firmenname>Firmenname2</Firmenname>
	</eintrag>
        <eintrag>
		<ID>3</ID>
		<Firmenname>Firmenname3</Firmenname>
	</eintrag>
</referenzen>
```

Ich hoffe, jemand kann damit was anfangen.
Ich habe leider nicht wirklich viel Ahnung von PHP in Verbindung mit XML.


----------



## pogo (8. Dezember 2005)

Hallo,

mich Interessiert auch wie ich XML Nodes löschen kann.
Kenne mich leider nicht so gut mit den XML funktionen von PHP aus. Habe schon alles durchgegooglet und nur folgende Hilfe gefunden: http://de3.php.net/manual/en/function.dom-domnode-removechild.php

Daraus habe ich dann folgendes für mich abgeleitet:

```
$doc = new DOMDocument;
$doc->load($file);

$guestbook = $doc->documentElement;
$entry = $guestbook->getElementsByTagName('entry[id="'.$_POST['id'].'"]')->item(0);
$guestbook->removeChild($entry);

$doc->saveXML();
```

Meine XML Datei sieht folgendermaßen aus:

```
<?xml version="1.0" encoding="iso-8859-1"?>
<guestbook>
<entry>
	<id>1134046595</id>
	<date>08.12.2005</date>
	<time>13:56</time>
	<user>Name</user>
	<email>Mail</email>
	<homepage>URL</homepage>
	<text>Text</text>
</entry>
<entry>
	<id>1134046494</id>
	<date>08.12.2005</date>
	<time>13:54</time>
	<user>Name</user>
	<email>Mail</email>
	<homepage>URL</homepage>
	<text>Text</text>
</entry>
</guestbook>
```

Leider bekomme ich folgende Fehlermeldung:
Warning: removeChild() expects parameter 1 to be DOMNode, null given

Komme jetzt leider nicht weiter und hoffe Ihr könnt mir Helfen!


----------



## rythms (8. Dezember 2005)

DOMDocument->getElementsByTagName() liefert ein Objekt des Typs DOMNodelist zurück.
Du versuchst dieses Object an DOMNode->removeChild() zu übergeben.
Das ist so nicht korrekt.
Du musst vorher mit DOMNodelist->item() ein Objekt des Typs DOMNode auswählen.
Achte auf die zurückgegebenen Typen!

Zu dem Beitrag darüber:
SimpleXML ist nur bedingt zum Ändern von XML geeignet, sondern vielmehr zum abfragen einer XML Datei. Zum bearbeiten sollte man DOM benutzen.


----------



## pogo (8. Dezember 2005)

Danke für Deine Hilfe!

Habe jetzt auf die Typen geachtet. Leider funktioniert es trozdem nicht (er tut einfach nichts).
Den Code habe ich wie folgt geändert:

```
$doc = new DOMDocument;
$doc->load($file);
$xp = new DOMXPath($doc);
$guestbook = $doc->documentElement;
			
$entry = $xp->query('entry[id="'.$_POST['id'].'"]');
$guestbook->removeChild($entry->item(0));

$doc->saveXML();
```

Könnnt Ihr mir weiterhelfen?


----------



## pogo (8. Dezember 2005)

Habe den Fehler gefunden!

Ich muss :$doc->save($file);
statt: $doc->saveXML();

verwenden!


----------

