Floats aus XML parsen in C?

Knogle

Volt-Modder(in)
Ich gruesse euch liebe Community.

Aktuell stehe ich vor folgendem Problem:

Ich moechte gerne aus beispielsweise so einer XML Datei:

Code:
<map edf:definitions="editor_main">
    <object id="object (LOW_BED_3) (1)" breakable="true" interior="0" collisions="true" alpha="255" model="1794" doublesided="false" scale="1" dimension="0" posX="268.09961" posY="1881.5" posZ="-31.4" rotX="0" rotY="0" rotZ="0"></object></map>

Dort moechte ich die Floats fuer posX, posY etc. rausparsen, habe aber festgestellt dass das anwenden von XML parsern verdammt kompliziert ist.
Kann ich das alternativ eventuell mit fscanf loesen? Wenn ja wie muss meine fscanf Zeile aussehen? Denn zwischen den Floats etc. sind ja vielen Symbole, Sonderzeichen als auch Strings, die muss ich ja irgendwie ignorieren

Ich hoffe jemand kann mir helfen
Code:
<object id="object (LOW_BED_3) (1)" breakable="true" interior="0"  collisions="true" alpha="255" model="1794" doublesided="false" scale="1"  dimension="0" posX="268.09961" posY="1881.5" posZ="-31.4" rotX="0"  rotY="0" rotZ="0"></object>
hieraus die einzelnen Werte rauszukriegen.

Wenn jemand sich mit XML Parsern auskennt, kann jemand eventuell ein kleines Beispiele eben, wie das in meinem Fall gehen wuerde? Ich waere fuer eure schonmal sehr dankbar, und danke euch im Vorraus.
 
Wenn du weißt, was du willst, such es doch mit strstr, bzw arbeite dich durch bei mehreren Datensätzen

habe grad keinen C Compiler da, aber so könnte es gehen:
- Suche posX="
- Setze den XML ab dieser Pos(+6) in eine neue Variable
- Suche " (z.B. mit strcspn) in der neuen Variable und schon weißt du, dass in 0 bis Ergebnis(-1) von die Zahl steht


Habe aber schon ewig kein C mehr angefasst, zuletzt in meiner Ausbildung .. aber das ist schon ziemlich lange her ;-)


Ich hab mal was zusammengebastelt, gibt ja zum Glück online C Compiler:

Code:
#include <stdio.h>
#include <string.h>

int main()
{
   char src[]="<map edf:definitions=\"editor_main\"><object id=\"object (LOW_BED_3) (1)\" breakable=\"true\" interior=\"0\" collisions=\"true\" alpha=\"255\" model=\"1794\" doublesided=\"false\" scale=\"1\" dimension=\"0\" posX=\"268.09961\" posY=\"1881.5\" posZ=\"-31.4\" rotX=\"0\" rotY=\"0\" rotZ=\"0\"></object></map>";
    char find[]="posX=\"";
    char find2[]="\"";
    char *tmp;
    
    char erg[20];
    
    tmp=strstr(src,find);
    tmp+=6;
    
    memset(erg, '\0', 20);
    strncpy(erg, tmp,strcspn(tmp,find2));
    
    printf("PosX ist: %s\n", erg);
   

    return 0;
}
 
Zuletzt bearbeitet:
Vielen Dank schonmal dafuer fuer deine Anstrengungen :D
Nun bleibt mir noch ein Problem:

Habe ich kleine Dateien als Input, sagen wir mal 10-20 Zeilen, klappt das ganze Problemlos, und das Script printet mir %d Objekte konvertiert, okay.
Nehme ich fette Dateien, wird die Ausgsabedatei zwar erfolgreich erzeugt und gefuellt, jedoch terminiert das Programm an sich nicht, es laeuft weiter und lastet die CPU 100% aus.
Also es muss irgendwie an der Groesse liegen, aber was genau da falsch ist weiss ich nicht.

Weiss jemand weiter? Hier mal mein Code zur Kontrolle

[C] #include <stdio.h> #include <asm-xml.h> /* (1) CreateObject (2) CreateDynami - Pastebin.com
 
Zurück