# XML Datei erstellen und gleich wieder parsen



## Tylor Durden (28. März 2006)

Hi!

Ich arbeite momentan an einer generischen Gui die ich mittels Thinlet verwirklichen möchte. Zu dem muss ich eine XML-Datei erstellen und diese anschießend sofort wieder parsen. Folgendes Problem: Anscheinend arbeitet der Fileoutputstream zu langsam und somit ist noch keine Datei zum Parsen vorhanden. Kurzen Augenblick drauf schon.
Nun meine Frage: Gibts für dieses Problem irgendeinen Trick? Hab mir schon gedacht diese beiden Arbeitsschritte in 2 Threads zu verpacken und den einen auf den anderen "warten" zu lassen...


----------



## RealHAZZARD (28. März 2006)

Für XML gibts eigene Streams.
Aber da kommt es ersteinmal darauf an, wie viel XML du hast, wieviel du damit arbeites (in deiner App.) usw.
Und je nach dem, nutzt man dann Sachen wie SAX oder JDOM...um nur mal 2 große zu nennen. Kannst ja mal dannach googlen.
Wie ^verwendest^ du denn dein XML.


----------



## Tylor Durden (28. März 2006)

Hi!

verwende bereits JDom...
SAX kann ich in diesem Fall nicht verwenden...

Verwende es folgendermaßen: Ich hol mir aus einer DB versch. Objekte. Diese bastle ich je nach Anzahl und Typ zu einem JDOM-Baum zusammen und schreide dies in eine Datei:
try {
XMLOutputter outputter = new XMLOutputter();	
			outputter.output(doc, new FileOutputStream("src\\GUI\\students.xml"));
		}catch (Exception e){
			e.printStackTrace();
		}


----------



## RealHAZZARD (28. März 2006)

Du willst gleich nach dem was in TRY steht das File wieder lesen?
Dann füge dem TRY noch ein finally an, und lese dann die Datei wieder.
Das sollte eigentlich gehen.


----------



## Tylor Durden (28. März 2006)

Hi!

try {
			XMLOutputter outputter = new XMLOutputter();	
			outputter.output(doc, new FileOutputStream("src\\GUI\\students.xml"));	
		}catch (Exception e){
			e.printStackTrace();
		}finally{
			//Pase-Anweisung für Thinlet
			add(parse("students.xml"));
		}

So funktionierts leider nicht...oder hab ich Dich falsch verstanden?


----------



## RealHAZZARD (28. März 2006)

Wie? Hast du das selbe problem, oder ein anderes?
Wenns nix aus macht, schreib mal bitte den ganze Code.
Das lässt sich besser lesen.


----------



## Tylor Durden (28. März 2006)

Hi!

bekomm' die gleiche Fehlermeldung... Null-Pointer bzw. Unknown Source

Kann es sein dass Eclipse daran schuld is? im Ordner wird die XML-Datei erstellt...im Eclipse seh ich die natürlich erst dann wenn ich refreshe...?


----------



## RealHAZZARD (28. März 2006)

Nein ich glaube nicht, dass eclipse schuld hat.
Das kling dannach, als würdest du das File (input),
nicht wriklich kriegen.
Ist besser du postest mal den Code und die fehlermeldung.


----------



## Tylor Durden (28. März 2006)

Hi!

Aber wenn ich meine Applikation ein 2.mal danach ausführe, verwendet er die XML datei die er beim 1. mal erstellt hat! D.h. er liest ja die Datei, eben nur bevor er sie fertig geschireb hat.


----------



## RealHAZZARD (28. März 2006)

Wie liest du denn die Datei?


----------



## Tylor Durden (28. März 2006)

Hi!

siehe:
}finally{
//Parse-Anweisung für Thinlet
add(parse("students.xml"));
}

kann da Problem jetzt ein wenig eingrenzen. Die XML-Datei wird vermutlich doch rechtzeitig geschriebn, aber einlesen kann er sie erst wenn ich im Eclipse "Refresh" bzw. F5 durchgeführt hab. 
Habs mittlerweile bei "add(parse("students.xml"));" mit absolutem und relativen Pfad versucht...ohne Erfolg


----------



## RealHAZZARD (28. März 2006)

Wenn ich das richtig gelesen habe erwatet die Methode ein Objekt.
Ich glaub nicht dass es gleich den String haben möchte!? (Auch wenn es technisch möglich ist)
Ich denke eher, dass es eine Komponente zum hinzufügen in einen Container möchte.
Das entnehme ich jedenfalls dem Satz 
"Adds the specified component to the container at the given position",
der in der API zu finden ist. 
Ich denke du benutzt die Methode falsch.


----------



## Tylor Durden (28. März 2006)

Hi!

die parse-Methode liefert ein Object!
und diese erwartet als parameter einen String... "public Object parse(String path)"


----------



## RealHAZZARD (28. März 2006)

OK. Habs geblickt.
Da kommt aber wohl seites des parse() nicht viel an.
Sieht so aus, als wäre das xml-file für die parsemethode malformed.
Soll meinen: XML ist immer ein bisschen zickig was die files angeht.
Da reicht manchmal ein whitespace.
Ich hatte es auch schon, dass jdom nicht lesen konnte, was es kurz vorher erstellt hat.


----------



## surjohn (3. Februar 2009)

Hallo,
Ich habe hier dasselbe Problem. Die xml Datei wird erzeugt, aber kann sie nur parsen nachdem ich im eclipse auf f5 drucke. Kann mir jemand konkret sagen was ich machen soll, oder wie ich meine klasse ändern soll?
Ich habe versucht das zu machen was hier in diesem Forum gesagt ist, aber kein Erfolg.
Bitte um eine Antwort.

grüße,
johnny


----------



## procurve (3. Februar 2009)

Vermutlich hängt von der Datei noch was im Cache, also am Besten vor dem Lesen nochmal schliessen.


----------

