PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java und XML


SGT.Hawk
2005-08-18, 10:20:00
Hallöchen!
So ich habe eine kleine GUI Anwendung für einen programmiert, der Kontakte verwaltet.Man kann halt löschen,aktualisieren und neu einfügen.Das ganze wird in eine XML Datei abgespeichert.So weit so gut klappt auch wunderbar mit der JDOM API.So neulich kam der Kunde halt an und wollte ein weiteres Datenfeld haben.Ich kein Problem,die dtd Datei aktualisiert und eine neues Datenfeld eingfügt in der Klasse.Ich habe jetzt ein Problem,dass er beim Suchen die Anwendung abstürzt,da er jetzt beim Suchen auch das neue Element abgefragt wird und der natürlich bei allen Kontakten keinen Wert besitzt.In der XML Datei ist auch kein Element da.Ich habe dann einen Konvertierungstool geschrieben,der einfach in jedem Kontakt einfach das Element mit einem LeerString überschreibt.Hat auch geklappt.Die Anwendung läuft wieder,aber ich finde die Lösung blöd.Ich dachte XML wäre da so flexibel.Hätte ich was anderes machen können oder meine Abfragen anderes gestalten können?

Hucke
2005-08-18, 10:39:42
Klingt eher als ob Du ein Problem bei Deiner XML Parserei hast. Vermutlich erhälst Du einen null Wert aus Deinem leeren Feld, machst dann was damit (ohne zu überprüfen ob der Wert != null ist) und schon fliegt Dein Programm mit null Pointer Exception raus.

HellHorse
2005-08-18, 10:46:06
Hast du einen default-value in den DTD geschrieben?

SGT.Hawk
2005-08-18, 10:54:45
@Hucke
Daran habe ich auch gedacht,aber es kann ja nicht sein,dass wenn ich jedesmal ein neues Element einfüge,nur weil es leer ist,noch zusätzlich auf null abfragen müsste.Das Problem ist,dass das Element noch nicht exisitiert.
@Hellhorse
Das ist die Lösung!
Hatte ich natürlich nicht,würde automatisch der SaxParser das einfügen beim lesen machen?
@habe eben mich informiert,dass Default Werte nur bei Attributen gibt.Beim mir sind aber alles Elemente,da habe ich in der Richtung nix gefunden:-(

Hucke
2005-08-18, 12:18:46
@Hucke
Daran habe ich auch gedacht,aber es kann ja nicht sein,dass wenn ich jedesmal ein neues Element einfüge,nur weil es leer ist,noch zusätzlich auf null abfragen müsste.Das Problem ist,dass das Element noch nicht exisitiert.


Warum nicht? Muß ich bei Datenbankabfragen ja auch immer machen.
Packs halt in die Routine, die das Parsing übernimmt.

SGT.Hawk
2005-08-18, 17:59:22
nee,sowas finde ich unschön,nur weil ich zusätzlich ein element eingefügt habe,der in der XML datei noch nicht drine ist.Validiert ist er ja,also ist es kein Fehler!Kann ja nicht angehen,dass ich,wenn immer mehr Datenfelder kommen,ich
immer vorher den element auf null überprüfen muss.

mithrandir
2005-08-19, 08:21:51
Dere!

Kannst du uns einmal deine DTD posten? Würd mich nur mal interessieren.

bye, Peter

SGT.Hawk
2005-08-19, 10:18:35
Kein Problem.

mithrandir
2005-08-19, 11:33:15
Dere!

Du gibts ja an, dass jeder Kontakt auch jedes Element besitzen muss. Ist das korrekt und so gewollt? Ich würde es nämlich einfach so abwandeln, anstatt des Fragezeichens (mindestens ein Element muss vorhanden sein) den Stern zu verwenden (es darf auch gar kein Element vorhanden sein).

Anstatt:
preName?

Jenes hier:
preName*

bye, Peter

SGT.Hawk
2005-08-19, 14:23:01
Huch,ich dachte es wäre genau andersherum.
@edit:da liegst du leider falsch,ich habe nachgeschaut.
? bedeutet wie in regex auch ein oder keins.

mithrandir
2005-08-19, 15:01:29
Shit, dann hab ich mich also vertan. Naja, dann kann's ja nur an deinem Code liegen...