# Kann man neue Knoten löschen?



## DocMcFly (18. Jul 2005)

Hallo,

folgende Aufgabe habe ich zulösen(keine Sorge keine Hausaufgabe ;-). In meiner XML-Datei stehen mehrer Konfigurationen und eine Vorlage-Konfiguration.
Die Vorlage soll beliebig dupliziert und die Konfigurationen aus der manipulierten Vorlage sollen gelöscht werden können. Die XML-Datei sieht ca. so aus...


```
...
<einstellungen>
  <konf>....</konf>
  <konf>....</konf>
  <konf>....</konf>
  <vorlage>....</vorlage>
</einstellungen>
...
```

Zuerst wollte ich die Vorlage duplizieren (clonen)  und umbennen - Umbennen ging nicht   

Also hab ich einen neuen <konf>-Knoten erzeugt und die Childs von <vorlage> kopiert. Das funktioniert. So weit so gut.

Das Löschen der geparste <konf> - Knoten ist auch kein Problem.

Jetzt kommt *meine Frage und Problem* - aus irgendeinem Grund kann ich neu hinzugefügten Knoten nicht löschen. 

Ich verwende "Oracle JDeveloper". Der zeigt mir im Debugger-Mode an, dass in den neuen Knoten kein "fNodeIndex" haben - aber die geparsten Knoten schon. 

Mein Vermutung ist nun: bei <einstellung>.remove(<neueKonf>) - sucht der <einstellung>-Knoten nach dem <neueKonf> Knoten mittels des  "fNodeIndex" . Diesen <neueKonf>-Knoten kann er aber nicht finden, weil dieser keinen "fNodeIndex"  hat.

Liege ich damit richtig? Wenn ja - wie kann ich dem Knoten einen solchen Index geben? 
Warum kann ich keine Knoten umbennen? (fände ich sehr blöd, wenn das nicht geht)

Was  macht der Parser anders, wenn er den DOM-Baum aufbaut?   
Bitte nicht vorschlagen: DOM-Baum abspeichern und neuladen. Das Beispiel oben ist sehr klein. Der reale Baum kann aber eine riesige Größe erreichen und es wäre doof - wenn ich den neu parsen lassen müsste - weil das viel zu langsam wäre. 

Würde mich über Anworten und Tipps freuen...  

Clemens 

P.S.Hier noch die Imports - falls es an meinen Packeten liegt:

```
import javax.xml.parsers.*;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.EntityReference;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import org.xml.sax.SAXException;
```


----------



## DocMcFly (18. Jul 2005)

Sollte ich vielleicht auf JDOM umstellen? 

Clemens


----------



## Bleiglanz (18. Jul 2005)

was genau geht nicht? welche Fehlermeldung?

removeChild(Node n)???

evtl. mal DocumentFragment anschauen


----------



## DocMcFly (18. Jul 2005)

ja. remove(Node) geht nicht, bei neu erzeugten Knoten bekomme ich:


```
org.w3c.dom.DOMException: NOT_FOUND_ERR: An attempt is made to reference a node in a context where it does not exist.
	at org.apache.xerces.dom.ParentNode.internalRemoveChild(Unknown Source)
	at org.apache.xerces.dom.ParentNode.removeChild(Unknown Source)
```

bei geparsten Knoten läuft alles prima.  :autsch: 

10 min.... später...

- danke ich hab nein "this." vergessen - der Name war bei remove falsch... manchmal hilft wirklich nur zehnmal genaues hinsehen....

Danke

Clemens


----------



## spoensche (19. Jul 2005)

Ich kann dir JDOM nur empfehlen, die api ist leicht verständlich und einfach zu benutzen.


----------

