[GELÖST] XML Reader basteln?
Übersicht

CO2ehemals "SirMO"Betreff: [GELÖST] XML Reader basteln? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Ich wollte mal fragen, wie man in BB .xml dateien ausliest. Da ich davon ausgehe, dass es keine vorgefertigten Funktionen dafür gibt, wollte ich nun selbst ein paar (?) schreiben. so sähe zum beispiel eine Datei aus: Code: [AUSKLAPPEN] <vehicle name="Bus">
<vehdata> <id>$veh_bus$</id> <containername>3d\vehicle.co2</containername> <maxspeed>80</maxspeed> <ps>120</ps> <cylinder>6</cylinder> <fuelusage>0.005</fuelusage> <drive acceleration="0.0005" decceleration="0.001"/> <seat>48</seat> </vehdata> <3d> <main file="Bus.x" posx="0" posy="0" posz="0"/> <wheels> <frontright file="BusRR.x" posx="nA" posy="nA" posz="nA"/> <frontleft file="BusRL.x" posx="nA" posy="nA" posz="nA"/> <backright file="BusRR.x" posx="nA" posy="nA" posz="nA"/> <backleft file="BusRL.x" posx="nA" posy="nA" posz="nA"/> </wheels> </3d> <attribute name="bus"/> </vehicle> So, und wie kann ich nun eine Variable auslesen? und vor allen dingen: wie läuft das bei den "befehlen" mit mehreren parametern (z.B.: die unter "<wheels>"). Ich wüsste jetzt nicht, wie ich die ganzen Stringbefehle einsetzen müsste (Right(), Left(), InStr()), um eine Variable auszulesen, außerdem sollte er es nicht statisch auslesen, also zeile für zeile und dann einfach die "befehle" wegmachen und die werte so übertragen, sondern auch den variablen die richtigen werte zuweisen, wenn die "befehle" vertauscht sind. Ich entschuldige mich schonmal im vorraus für eventuelle ausdrucksfehler, bin grad ein wenig unter zeitdruck ![]() danke schonmal im vorraus, mfG; CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
- Zuletzt bearbeitet von CO2 am Sa, Apr 09, 2011 13:29, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, das ist kompliziert und für Anfänger nicht unbedingt empfehlenswert. Wenn du es versuchst, solltest du mit den String Funktionen umgehen können. Den geparsten XML-Baum könnte man in Types speichern, da können die Knoten miteinander verknüpft sein und über passende Funktionen kann man die richtigen Knoten/Werte 'raussuchen. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Blitzprogger |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ganz ganz einfach könnte das so aussehen.
Pseudocode BlitzBasic: [AUSKLAPPEN] txt$ = ReadLine (file) Auf diese Weise funktioniert es mit ganz einfachen Teilen wie: <elite>1337</elite> Wenn du es zu mehr fähig machen willst, so musst du den obigen Teil noch ziemlich was ausbauen. Hoffe es hat geholfen. ^^ mfg, Blitzprogger |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. ![]() |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, danke für die Hilfe... Ich werd mich mal dransetzen ;D | ||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
darth |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
so unheimlich kompliziert ist es eigentlich gar nicht. Du musst wissen wie man mit einem Stack umgeht und dann noch die wichtigsten String-Manipulationen kennen: Instr ![]() ![]() ![]() ![]() ![]() ![]() Edit: Jetzt weiss ichs \o/ Danach kannst du einfach jede Zeile nacheinander abarbeiten. Wenn ein neues Objekt kommt, legst dus auf den Stack, wenn die Beschreibung fertig ist, nimmst dus wieder raus. Die Objekte können eigentlich alles sein.. Du musst einfach nachher noch irgend einen Zugriff drauf haben (also entweder Types, oder einen zweiten Stack). Für die Zeilen würde ich dir empfehlen, sie in Einzelteile aufzusplitten. Dass du dir also Splitter definierst (z.b einen Leerschlag (nicht sehr empfehlenswert.. aber so hast dus in deinem Bsp gemacht..) oder ein Komma). Danach kannst du einfach den String, solange er Splitter enthält, aufteilen und abspeichern. Danach kannst du dann die einzelnen Splits durchgehen und dir die Attribute aussuchen. Natürlich brauchst du auch eine Liste mit "Codewörtern", dass der Interpreter auch versteht, was er mit einem "SEAT" anfangen soll. Falls du noch ein weiteres Beispiel brauchst, könntest du dir sowas anschauen oder dir dasda runterladen. Das sind Beispiele von mir, die ich für Figuren verwendet habe. Als wichtigsten Tip (da ich das Ding auch schon komplett neu geschrieben habe..) kann ich dir anraten, den Code angenehm zu formatieren und nach Zusammengehörigkeit zu sortieren. Bei vielen Codewörtern kann es extrem unübersichtlich werden, was wo wie dazugehört.. MfG, Darth |
||
- Zuletzt bearbeitet von darth am Sa, Apr 09, 2011 11:55, insgesamt einmal bearbeitet
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Falls Du's ganz richtig machen willst, denk dir einen Automaten aus, dann kannst Du auch gleich einen Errorhandler mit einbauen. Solche Klammersprachen gehen damit ziemlich gut. | ||
Starfare: Worklog, Website (download) |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, erstmal danke für die Hilfe!
Ich bin nun aber (mal wieder) auf ein Problem gestoßen: Ich möchte ein Array in dem Type haben, weiß aber nicht, wie ich es definieren soll. So sieht der Type Vehicle nun aus: BlitzBasic: [AUSKLAPPEN] Type Vehicle Ich brauche das Array, weil ich Fahrzeuge habe, die mehrere Räder der gleichen sorte haben (siehe hier: Code: [AUSKLAPPEN] <vehicle name="RMV">
)
<vehdata> <id>$veh_rmv$</id> <maxspeed>100</maxspeed> <ps>1200</ps> <cylinder>14</cylinder> <fuelusage>0.0087</fuelusage> <drive acceleration="0.0013" decceleration="0.0026"/> <seat>32</seat> </vehdata> <3d> <main file="RMV.x" posx="nA" posy="nA" posz="nA"/> <wheels> <frontright file="RMVRR.x" posx="nA" posy="nA" posz="nA"/> <frontright file="RMVRR.x" posx="nA" posy="nA" posz="nA"/> <frontleft file="RMVRL.x" posx="nA" posy="nA" posz="nA"/> <frontleft file="RMVRL.x" posx="nA" posy="nA" posz="nA"/> <backright file="RMVRR.x" posx="nA" posy="nA" posz="nA"/> <backright file="RMVRR.x" posx="nA" posy="nA" posz="nA"/> <backleft file="RMVRL.x" posx="nA" posy="nA" posz="nA"/> <backleft file="RMVRL.x" posx="nA" posy="nA" posz="nA"/> </wheels> </3d> <attribute name="truck"/> </vehicle> Und so sieht meine xml-auslesefunktion bisher aus (ist noch nicht fertig!) BlitzBasic: [AUSKLAPPEN] ;Konstanten (btw: ich vergesse immer, wie man variablen in types anspricht ![]() Achja noch ne frage: Kann man den Type und die funktion in separaten dateien speichern? Wenn ich den type z.b. im hauptprogramm habe und die funktion in einer anderen datei (und sie dann via "Include" im hauptprogramm einschließt), kann er dann trotzdem auf den type zugreifen? mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, Types sind global, die kann man überall benutzen.
Array im Type geht so in BlitzBasic: [AUSKLAPPEN] Type MeinType Das was Du suchst ist übrigens variable\typevariable und nicht variable.typvariable. |
||
Starfare: Worklog, Website (download) |
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
sachtma gibt es nicht schon nen XML Reader für BlitzBasic? | ||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
![]() |
Blitzprogger |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe noch einen Fehler entdeckt.
Du liest Readline () mehrmals in einem Durchlauf aus, aber speicherst es in keiner Variable. Readline geht aber bei jeder Ausführung eine Linie weiter! Du hast in diesem Fall jedes mal ein anderes Ergebnis. Fehler: BlitzBasic: [AUSKLAPPEN] ReadLine(xmlfile) ;Solange zeilen lesen, Hier hast du unterschiedliche Ergebnisse bei Readline. Es müsste etwa so aussehen: BlitzBasic: [AUSKLAPPEN] derText$ = ReadLine(xmlfile) ;Solange zeilen lesen, mfg, Blitzprogger |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. ![]() |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Alles klar, danke für die hilfe! | ||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group