# Aus einem Array, die Daten in XML schreiben



## haggard (20. März 2004)

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!*


----------



## nautiLus` (20. März 2004)

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:


```
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


----------



## haggard (20. März 2004)

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


----------



## nautiLus` (20. März 2004)

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


```
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.


----------



## Thomas Darimont (20. März 2004)

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 

HTH 

Gruß Tom


----------



## Thomas Darimont (20. März 2004)

.


----------



## haggard (20. März 2004)

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.    

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

mfg stefan


----------



## Thomas Darimont (20. März 2004)

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


----------



## haggard (21. März 2004)

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


----------



## Thomas Darimont (21. März 2004)

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


----------



## haggard (21. März 2004)

He he... genau. Ein bißchen Arbeit steckt da auch noch drin. So wie es bis jetzt vorhanden ist, ist es eine Art Editor. Der Viewer ist ein weitere Komponente.  Diese liest dann die erzeugte XML Datei ein und stellt dann das was im Editor gebaut wurde wieder dar. Klingt vielleicht umständlich, aber so ist die Vorgabe. Aber das was Ihr mir hier gepostet habt reicht auch erst einmal.

mfg
Stefan


----------

