Mich hat
XML zumindest zum speichern von komplexen Objekten nicht überzeugt. Ich fand zwar den Ansatz und die Möglichkeit, den
XML-Experten zu nutzen, sehr interessant aber dann im Handling doch zu kompliziert und unflexibel.
Daher habe ich für meine Objekte eine eigene Dateistruktur festgelegt (ähnlich JSON). In dieser können sich die Objekte auch gegenseitig referenzieren.
Beim Laden einer Datei werden die Objekte dann wieder hergestellt. Dazu dienen ID´s, die in den Objekten und der Datei gespeichert sind.
Im Gegensatz zu
XML können Knoten problemlos leer sein bzw. komplett fehlen. Die tatsächliche Struktur ist über die Objekte im Hauptspeicher definiert. Diese lesen dann (wenn vorhanden) ihre Daten aus der Datei.
Im Grunde wird die Datei etwa wie eine "mehrdimensionale Ini" genutzt. Dabei ist die Reihenfolge der Einträge nicht relevant, sondern lediglich die Struktur und "Feldnamen".
Binäre Daten (im Beispiel Picture) werden im Base64-Format abgelegt.
Nachteile des Konzepts sind, dass
- die Datei recht groß wird (allerdings dann auf Wunsch komprimiert wird)
- die Daten zur Laufzeit im Hauptspeicher gehalten werden
(wobei letzteres wie in meinem Fall natürlich auch explizit gewollt sein kann
)
...oh, ich schwiff ab...
Für den Datenaustausch mit feststehenden Strukturen halte ich
XML jedoch durchaus für nützlich und praktikabel.
Code:
!ProgramName=Olympic
!ProgramVersion=(V. 0.2.1-)
<TournamentEvent=20100906211710810-20100906211711470-0000000006
Name=Test
<State=20100914105207021-20100914105207611-0000000008
>
<Sport=20100827212547328-20100827212547942-0000000002
Name=Badminton
SportPlaceName=Feld
<NumeratorList=20100827212547328-20100827212547942-0000000003
<Numerator=20100827212547328-20100827212702853-0000000005
Activate=True
Definition=0..19:21;20..28:+2;29:30
Name=Rallypoint
PlanDuration=30
PointName=Bälle
WinSetCount=2
>
<Numerator=20100827212547328-20100827212808350-0000000006
Activate=True
Definition=0..14:15;14..16:17
Name=alte Zählweise bis 15
PlanDuration=40
PointName=Bälle
WinSetCount=2
>
<Numerator=20100827212547328-20100827212845934-0000000007
Activate=True
Definition=0..10:11;10..12:13
Name=alte Zählweise bis 11
PlanDuration=25
PointName=Bälle
WinSetCount=2
>
>
...
<Member=20101025203449672-20101025203508688-0000000203
Activate=True
<Person=20101025203449672-20101025203508688-0000000204
Birthday=01.01.1901
eMail=xxx@gmx.de
FirstName=René
Kind=m
LastName=Preißler
Picture=eJzt3edTFFu/L/B7/pP74t6qc8/z7GfvrUhO5iw5JxVzjtucA2IElSw55yQ554xIFA........
<State=20101129225442228-20101129225526456-0000004171
>
>
>
...
>
>