Aus einem Array, die Daten in XML schreiben

haggard

Grünschnabel
Hallo!

Ich habe folgendes Problem:

Ich habe mit einem Kumpel zusammen ein Programm (mit Eclipse) geschrieben. Da der Quelltext zu lang für die Anzeige hier ist, biete ich euch den Quelltext als download an.

Quellcode

Nun gibt es aber noch ein paar Probleme. Das mir am schwierigsten vorkommende Problem ist hierbei, die Daten die in einem Array (eine Art Speicher) erzeugt werden in eine XML Datei zu schreiben.

Ich habe gerade erst angefangen mich in XML einzulesen, habe also noch so gut wie keine Ahnung von der Materie. Wenn man das Programm mit Eclipse ausführt und sich dann auf den Reiter Konsole klickt kann man den Inhalt des Arrays sehen. Die Daten liegen als Strings vor. Also muss ich irgendwie diese Strings in eine XML Datei schreiben. Ich weiß aber nicht wie.

Ich habe mir gedacht eine extra DTD Datei zu schreiben und damit die Struktur der XML Datei festzulegen.
Bsp:

<grafikPanel>
<kachel name="11">
<bild>images/ventil.jpg<bild/>
<beschreibung>bal bla</beschreibung>
<x-pos>1</x-pos>
<y-pos>1</y-pos>
</kachel >
</grafikPanel>

Aber wie es dann weitergeht, weiß ich leider gar nicht. Soweit ich das mitbekommen habe, muss das irgendwie mit einem Parser und DOM / SAX geschehen. :(

Um das Programm auch auch benutzen zu können, sind hier auch nochmal die notwendigen Grafiken.

Die Grafiken

Zum Programm selbst noch:
Die Pulldown Menüs funktionieren noch nicht alle. Das heißt, nur die Auswahl der Koordinaten funktioniert und wird auch erstmal nur in dem Array sichtbar dargestellt. Das ist nämlich das andere Problem, die Grafiken an die richtigen Koordinatenposition zu bringen. Aber das ist im Moment noch nicht so wichtig.

Ich hoffe hier kann mir jemand helfen, ich weiß mir sonst keinen Rat mehr.
Mit freundlichen Grüßen
Stefan
Bei Fragen - bitte mailt!
 
Hallo, ich hab das Ganze nur überflogen weil ich in Stress bin hier aber mal ein ansatz:

Du willst ja die Strings in eine Datei schreiben:

PHP:
	public static void createFile(String dapFileName, String OUTPUT) throws FileNotFoundException
	{
		File file = new File(dapFileName+".dal");
		
      	if (file.exists())
      	{ 
      		System.out.println("Die File '"+dapFileName+".dal' existiert bereits!\nBitte zuerst loeschen!"); 
      	} else {
	      	PrintWriter pw = new PrintWriter(new FileOutputStream(file));
	      	pw.println(OUTPUT);
	      	pw.close();
	      	System.out.println("Die File '"+dapFileName+".dal' wurde erstellt, einfach doppelt anklicken!");
      	}
	}


Hier hab ich mal früher eine Methode geschrieben, die eine Datei erstellt und XML Code hineinschreibt.

Der XML Code wirde immer in einn String gespeichert.

OUTPUT += ("<fileinfo>");
OUTPUT += ("<filename>");
OUTPUT += filename+".zip";
OUTPUT += ("</filename>");
OUTPUT += ("<url>");
OUTPUT += downloadUrl;
OUTPUT += ("</url>");
OUTPUT += ("</fileinfo>");

Hoffe das hilft ein wenig.

cya nauti
 
Vielen Dank erstmal für die Hilfe. Ich probier es gerade aus. Bekomme dabei aber einen Fehler in der Zeile

createFile(String xmlFileName, String OUTPUT) throws FileNotFoundException

Fehler: Syntaxfehler bei Token "xmlFileName", ")" erwartet

Hab eigentlich nur den Namen in xmlFileName geändert. Zumal der Fehler auch schon vorher aufgetreten ist. Also an der Namensänderung lag es nicht.

Zweitens, das mit der Methode die den XML code erzeugt habe ich noch nicht ganz verstanden. Bin aber auch gerade erst dabei mich damit zu beschäftigen.

Übrigens... die Daten bzw. Strings die in die XML geschrieben werden sollen stehen in dem Array speicher[][] .

Trotzdem schonmal vielen Dank für den Ansatz.

Stefan
 
Hi, hab mir das nochmal angeschaut und mal ein ganzes Beispiel gemacht!

PHP:
import java.io.*;
public class XMLtest
{
	public static void main(String args[]){
	
			String fileName = "ventil.xml";
			String fileInhalt = "Fileinhalt";

			String OUTPUT = generateXMLOutput(fileInhalt, fileName);

			try{
      			createFile(fileName, OUTPUT);
      		} catch(FileNotFoundException ee) {
      			System.out.println("FileNotFoundException");
      		}
	}
	public static String generateXMLOutput(String fileInhalt, String fileName) {
	
		String OUTPUT = "";	
		OUTPUT += "<grafikPanel>";
		OUTPUT += "<kachel name=\"11\">";
		OUTPUT += "<bild>"+fileName+"<bild/>";
		OUTPUT += "<beschreibung>"+fileInhalt+"</beschreibung>";
		OUTPUT += "<x-pos>1</x-pos>";
		OUTPUT += "<y-pos>1</y-pos>";
		OUTPUT += "</kachel>";
		OUTPUT += "</grafikPanel>";
		return OUTPUT;
	}
		 
	public static void createFile(String fileName, String OUTPUT) throws FileNotFoundException {
		File file = new File(fileName);
		
      	if (file.exists()){ 
      		System.out.println("Die File '"+fileName+"' existiert bereits!"); 
      	} else {
	      	PrintWriter pw = new PrintWriter(new FileOutputStream(file));
	      	pw.println(OUTPUT);
	      	pw.close();
	      	System.out.println("Die File '"+fileName+"' wurde erstellt!");
      	}
	}
}

Bei mir funktioniert dieses keine Script einwandfrei und erstellt ein XML File mit dem Inhalt von dem OUTPUT String.

Ich hoffe du kannst damit jetzt was anfangen. Das Ganze mit einem Array zu machen hab ich noch nicht versucht, sollte aber nicht allzuschwer sein.
Bin mir aber nicht ganz sicher, ob ich das genau versteh wie du das geschrieben hast.

mal schaun,

mfg nauti

edit// An den Inhalt in dem speicher[][] sollte man mit einfachen Schleifen rankommen, diese dann mit einer Methode wieder in die File speichern.
 
Zuletzt bearbeitet:
Hallo!

Hab mal ein wenig herumprobiert, vielleicht hilfts euch ja:

Zuerst hier dom4j herunterladen http://www.dom4j.org/download.html

Die HauptKlasse heißt TestFrm.
Unter dem Menüpunkt "init" könnt ihr ein Verzeichniss auswählen und die darin enthaltenen Bilder selektieren. (Strg+A)
Danach wird sich die GUI der gefundenen Daten annehmen.
Jetzt könnt ihr mal auf File "Save as XML" klicken daraufhin wird eine XML Datei
unter c:/Test.xml erstellt.

Wenn ihr nun die Applikation beendet und wieder startet, könnt ihr wieder mittels File "Load from XML" die Daten laden.

der Set Button verändert die Attribute des in der Kombobox gewählten Elements...

wollte das Programm noch weiter ausbauen, aber ich hab keine Lsut mehr :p

HTH

Gruß Tom
 

Anhänge

  • de_tutorials.zip
    83,4 KB · Aufrufe: 89
Erst einmal ein DICKES Dankeschön an euch beiden.

Ich bin auch schon am Ausprobieren wie das alles zusammenpasst und wie das funktioniert.

Ohne diese Tips hier, hätte ich wohl versucht einen Parser (mit DOM) zu erzeugen und dann vielleicht einen Document Object Tree, oder sowas in der Richtung. Allerdings hab ich davon so gut wie überhaupt keine Ahnung.

Allerdings hab ich noch bei der zweiten Lösung mit der TestFrm Probleme. Irgendwie kann Eclipse oder auch Jbuilder die gom4j.jar nicht finden. Daraus resultieren natürlich ein haufen Fehler. Ich probiers aber weiter!

Und ein weiteres Problem ist, daß ich auch irgendwie mit dem auslesen des des Arrays nicht weiter komme. Ich bin eben nicht der ultimative Programmierer. :rolleyes: :(

Trotzdem Danke für eure Hilfe... Falls ihr noch weitere Tips und Tricks habt, bin ich für jeden Vorschlag dankbar.

mfg stefan
 
Hallo!

Diese dom4j lib hinzuzufügen ist unter eclipse ganz easy...

1) rechte Maustatste auf Projekt
2) Properties
3) Java Build Path
4) Libraries
5) Add External Jars
6) hier die datei dom4j-full.jar auswählen

Fertig.

Gruß Tom
 
Super! Hat funktioniert! Und das Programm läuft auch einwandfrei.

mfg und vielen Dank
stefan

edit: Ist das normal das in dem grünen Fenster noch nichts angezeigt wird? Ich war mir jetzt nicht mehr so sicher ob das in dem Programm (TestFrm) auch schon funktionierte oder nicht. Wie dem auch sei, damit komm ich schon einmal ein großes Stück vorwärts
 
Zuletzt bearbeitet:
Hallo!

Wie schon oben erwähnt habe ich das Programm nicht ganz fertig gemacht...
ich wollte das grüne Fenster dazu nutzen um diese "Puzzle" Teile dynamisch anzuordnen und an der richtigen Position anzuzeigen ...
aber ein wenig Arbeit möchtest du doch sicherlich auch noch übrig haben wollen ;-)

Gruß Tom
 

Neue Beiträge

Zurück