SG Netzwerk      
Freitag, 25. Februar 2005, 21:40
Tutorial: Spass mit XML
Wie oft habt ihr schon ein eigenes Dateiformat geschrieben, um Einstellungen oder ähnliches abzuspeichern? Und wie oft war dabei dieser Parser so verbuggt das er fast
euer gesamtes Projekt bedrohte? Be wise - use XML!

Warum das Rad zweimal erfinden? Leider ist dies eines der Haupthobbies von viel zu vielen Hobbyentwickler.

Zum Beispiel bauen sie selbst kuriose Dateiformate und noch kuriosere Parser dazu.

Damit werden wir heute schluss machen - mit Hilfe unseres guten Freunds Open Source, der bekanntschaft gemacht hat mit Mister XML.

Warum XML?

Parser für eigene Dateiformate schreiben ist eine undankbare Aufgabe. Man verbringt viel Zeit Text Dateien auseinanderzunehmen, nur um ein paar Werte herauszulesen.

Außerdem muss man sich selber um Integer zu String bzw Float zu String konvertierungen kümmern.

Und ein neues selbstgebautes Teil bringt immer eine gewisse Buganfälligkeit mit sich.

Gottseidank gibt es fleißige Leute, wie die Macher von TinyXml. TinyXml ist ein Open Source Bibliothek, die Xml Dateien lesen und schreiben kann. Die API ist dabei sehr durchdacht, sodass man mit minimalstem Aufwand auch komplizierte Formate kreieren kann.

Einmal XML crash-course bitte

Wer von euch nicht weiß was XML ist - hier ein kleiner crash-course: XML ist eine Markup Language, das heißt mit ihr können Text Elemente markiert und grupiert werden.

XHTML basiert zum beispiel auf XML (XHTML ist vereinfacht gesagt striktes HTML - case sensitive etc).

Klingt nicht gerade prickelnd, aber bei näherem hinsehen merkt man wie simpel und gleichzeitig mächtig XML ist.

XML Dateien bestehen aus Nodes (Knoten, auch Element genannt), Attributes (Attribute von Knoten) und Text, um diese Elemente zu erklären gibts eine Beispiel XML Datei in der Eigenschaften des

Spielers gespeichert werden.

Player.xml


<PlayerProperties type="Krieger">
<Health value="100" />

<Model filename="models/player.mdl" />

<Description>
Der Kriger ist groß und böse. Sofortige Flucht ist empfohlen.
Danke, das Management.
</Description>

</PlayerProperties>

XML Dateien haben immer eine Baumstruktur. Es gibt genau ein Root Element (hier PlayerProperties), das alle anderen Knoten enthält.

Elemente können entweder weitere Child-Elemente haben, oder alleine da stehen, daraus ergeben sich zwei schreibweisen:


Mit Child Elementen
<{Element Name}>
{Child Elemente}
</{Element Name}>

Allein:
<{Element Name} />

Egal ob ein Element Childs hat oder nicht, kann es Attribute enthalten diese werden in die eckigen Klammern geschrieben und müssen einen Wert zugewiesen bekommen. Dieser Wert wird von zwei Anführungszeichen begrenzt.


<{Element Name} {Attribute Name}="{Wert}" />

Ein Sonderfall ist Text. Dieser wird als Child Element behandelt, dass keine eckigen Klammern trägt.

<{Element Name}>
Text Text Text
Text Text.
</{Element Name}>

Somit speichert unsere Spieler XML Datei folgende Informationen:


Spieler Type: Krieger
Health: 100
Model Datei: models/player.mdl
Description: Der Krieger ist [...]

Wie ihr seht hat die XML Datei einigen overhead, aber wir wollen doch Spiele machen, und nicht ultra schlanke Dateiformate für Konfigurations Dateien, oder?

1 | 2 | 3 | Bilder (0) | Kommentare (12)
 
Weiterführende Links:
Kommentare:
Guter Artikel. Auch wenn… (ZoE, 28.04.2005, 22:03)
Gutes Tutorial! Dafür… (1, 30.03.2005, 14:37)
Ich habe vorher keine… (cool++, 11.03.2005, 12:45)
Bewertung:
selbst bewerten:
2,9
Zum Bewerten musst du registriert und angemeldet sein.