JDOM Problem

Diablo68

Grünschnabel
Hallo,

schreibe gerade ein Tool, bei der mann mit der Maus auf einer Zeichenfläche Rechtecke aufziehen und per Doppelklick mit entsprechen Koordinaten in eine XML-Datei reinschreiben und mit der rechten Maustaste auch wieder von der Zeichenfläche und aus der XML-Datei löschen kann.

Nach jedem Schreib- oder Löschvorgang in der XML wird die letzte Version der XML-Datei abgespeichert.

Das Speichern funktioniert einwandfrei, nur wenn ich aber nach jedem Programmstart neue Rechtecke erzeuge und per Doppelklick in die XML-Datei schreibe und anschließend, eine von den zuletzt eingefügten Koordinaten löschen möchte, werden alle neuen Einträge gelöscht. Und wenn ich anschließend einen neuen Eintrag in die XML-Datei schreibe, werden alle zuvor gelöschten Einträge nochmals erzeugt. Ich verstehe nicht, vorher die alten Einträge, die zuvor gelöscht wurden, her stammen. Ich speichere eigentlich nach jedem Eingriff in die XML-Datei, die letzte Version wieder in die XML-Datei, so dass zuvor gelöschten Einträge eigentlich verschwunden sein müssten.

Hier der Code :

Code:
public class XMLTasks {

	protected org.jdom.Document doc = null;
	protected SAXBuilder b = null;
	private Element root = null;
	private File file = new File("koerper.xml");

	public XMLTasks() {
		try {
			b = new SAXBuilder(false);
			doc = b. build(file);
			root = doc.getRootElement();
		} catch (JDOMException j) {
		} catch (IOException e) {
		} 
	}

	public void deleteMark(MeinRechteck r) {
		List list = (List) root.getChild("bodyitems").getChildren();
		for(int i = 0; i < list.size(); i++) {
			Element element = (Element) list.get(i);
			if (element.getName().equals(r.getName())) {
				root.getChild("bodyitems").removeContent(element);	
				i = list.size()-1;			
			}		
		}
		saveXMLFile();	
	}
	
	public Vector<MeinRechteck> getMarks() {
		int x, y, w, h = 0;
		String name;
		
		List list = (List) root.getChild("bodyitems").getChildren();
		Vector<MeinRechteck> rects = new Vector<MeinRechteck>();
		for(int i = 0; i < list.size(); i++) {
			Element element = (Element) list.get(i);
			try {
				name = element.getName();
				x = element.getAttribute("x").getIntValue();
				y = element.getAttribute("y").getIntValue();
				w = element.getAttribute("w").getIntValue();
				h = element.getAttribute("h").getIntValue();
				rects.add(new MeinRechteck(name, x,y,w,h));
			} catch(DataConversionException e) {
				System.err.println("Werte konnten nicht aus der XML Dateigelesen werden !");
			}
		}
		return rects;
	}
	
	public void saveCurrentMark(MeinRechteck r) {
		Element newElement = new Element(r.getName());
		newElement.setAttribute("x", String.valueOf(r.x));
		newElement.setAttribute("y", String.valueOf(r.x));
		newElement.setAttribute("w", String.valueOf(r.width));
		newElement.setAttribute("h", String.valueOf(r.height));
		root.getChild("bodyitems").addContent(newElement);
		saveXMLFile();	
	}
	
	private void saveXMLFile() {
		try {
			Format f = Format.getPrettyFormat();
			FileOutputStream fos = new FileOutputStream(file);
			XMLOutputter serializer = new XMLOutputter(f);
			serializer.output(doc, fos);
			fos.flush();
			fos.close();
		} catch (final IOException e) {
			System.err.println("XML Datei konnte nich aktualisiert werden !");
		}
	}

Was könnte das Problem sein ?

Gruß

Diablo
 
Zurück