Werte in ein XML Dokument speichern

wSam

Erfahrenes Mitglied
Hallo zusammen

Ich möchte für mein Spiel Snake eine kleine Highscore Liste machen. Dies habe ich mit einem XML Dokument gelöst:

Code:
<?xml version="1.0"?>
<highscoreliste>
  <player0>
  	<rang>Rang</rang>
    <name>Name</name>
    <datum>Datum</datum>
    <zeit>Zeit</zeit>
    <punkte>Punkte</punkte>
  </player0>
  <player1>
  	<rang>1.</rang>
    <name>Name</name>
    <datum>Datum</datum>
    <zeit>Zeit</zeit>
    <punkte>Punkte</punkte>
  </player1>
</highscoreliste>

Nun lese ich die Daten in folgendem Stil aus und zeige Sie in einer Tabelle an:

Code:
tabelle.setValueAt(highscore.getChild("player"+i).getChildText("rang"),i,0);


Wie kann ich jedoch nun einen neuen Wert hinzufügen durch ändern der vorhandenen Spieler? Ich übergebe den Namen durch ein InputFeld und möchte die Daten mit setText im XML speichern.
Code:
highscore.getChild("player"+i).getChild("name").setText(name);
Dies geht jedoch nicht. Wie kann man dies lösen?

Vielen Dank im Voraus
 
Hallo,

warum schreibst du die Datei nicht komlett neu?

Wenn ein Spieler jetzt neu in die Liste kommt, musst du sowieso von allen nachfolgenden den Rang ändern, da sich dieser ja dann um 1 erhöht.
 
@Bernd

Dann soll ich alle Daten zuerst in ein Array auslesen, und danach wieder komplett neu schreiben?
 
lad einfach zu beginn bzw beim starten des spiels die komplette highscore und füge (wenn der spieler genug punkte hat) ihn dazu und speicher nach jedem hinzufügen das highscore objekt wieder...
 
Danke für die Antwort. Aber wenn ich über highscore.removeContent() alles wegnehmen will, passiert nichts. Irgendwie kann ich gar nichts in die Datei schreiben. Was muss ich da noch beachten?

Vielen Dank nochmals
 
um eine datei mit inhalt zu füllen macht man folgendes...

Code:
BufferedWriter bw = new BufferedWriter(new FileWriter(new File(filename)));
bw.write(StringToWrite);
bw.close();

danach sollte der String in der datei stehn. bufferedwriter brauchste nich unbedingt, nen filewriter tut es sicherlich auch.

ich weiss nich wie du als xml serialisiert hast, aber dazu würde ich das xstream package nehmen (http://xstream.codehaus.org/http://www.xstream.codehaouse.org/) damit geht es wunderbar und ne erklärung is auf der hp
 
Code:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
/** 
* @author 
* 
* this class serialize an object to xml by using the 
* xstream.codehaus.org package and write/read it to/from hdd
*/
public class ObjectToXmlToFile {
	private XStream xstream;
	/**
	 * init stream for serialise to xml
	 * methode use is internal, therefore private declaration
	 */
	private void initStream(){
		xstream = new XStream(new DomDriver());
	}	
	/**
	 * methode to setup file with filename and serialize
	 * data inside this file
	 * @param filename is filename on hdd
	 * @param data is data to save
	 */
	public void saveGame(String filename, Object data){
		initStream();
		File file = new File(filename);
		try{
			FileWriter toFile = new FileWriter(file);
			toFile.write(xstream.toXML(data));
			toFile.flush();
			toFile.close();
		}
		catch(Exception e){e.printStackTrace();}
	}
	/**
	 * returns the unserialized object from the given file
	 * @param file
	 * @return
	 */
	public Object loadGame(String filename){
		Object temp=null;
		File file = new File(filename);
		initStream();
		try{
			BufferedReader reader = new BufferedReader(new FileReader(file));
			temp = (Object) xstream.fromXML(reader);
		}
		catch(Exception e){e.printStackTrace();}
		return temp;
	}
 
	public static void main(String[] args) {
 
		String test = "das ist ein test-string";
 
		ObjectToXmlToFile saver = new ObjectToXmlToFile();
		saver.saveGame("data.xml", test);
 
		System.out.println(saver.loadGame("data.xml"));
	}
}

hier mal eine beispiel klasse die ich grad für nen kollegen geschrieben hab, vielleicht hilft es dir weiter, wenn du es nicht schon fertig hast.....
 
@bl4ck29

Vielen Dank nochmals für deine Hilfe. Ich habe es aber über setAttribute().setValue gelöst, dies klappte wunderbar. Jetzt habe ich einfach ein bisschen viele Attribute aber ist sehr bequem so.
 
Zurück