Forum: PC-Programmierung integerzahl vom node in einer xml bekommen


von fassel (Gast)


Lesenswert?

Ich habe eine xml, wo ein node eine Zahl enthält

<person personID="0">
  <state>0</state>
</person>

der state ist immer eine Zahl. Aber ich bekomme es nur als string raus
1
if (0 == (xmlStrcmp(cur_node->name, (const xmlChar *)"state")))
2
                    {
3
                        state = xmlNodeGetContent(cur_node);
4
                        printf("%s ", state);
5
                        xmlFree(state);
6
                    }
Wie bekomme ich aber die Zahl als integer?
Das ganze mache ich in c mit libxml2.
atoi habe ich leider nicht.

von DPA (Gast)


Lesenswert?

atoi
strtol
strtoll
mpz_init_set_str
...

von Stephan (Gast)


Lesenswert?

fassel schrieb:
> atoi habe ich leider nicht.

Wenn Dein Compiler wirklich kein atoi haben sollte: baue es Dir einfach 
selbst. Sourcen von atoi() gibs im netz.
VG

von DPA (Gast)


Lesenswert?

Ungetestet:
1
int my_atoi(const char* s){
2
  bool negative = false;
3
  int result = 0;
4
  for(; *s && isspace(*s); s++); // If there is no isspace(), you could use *s == ' ' instead
5
  if(*s == '+'){
6
    s++;
7
  }else if(*s == '-'){
8
    negative = true;
9
    s++;
10
  }
11
  for(; *s >= '0' && *s <= '9'; s++){
12
    result *= 10;
13
    result += (*s) - '0';
14
  }
15
  if(negative)
16
    result = -result;
17
  return result;
18
}

von fassel (Gast)


Lesenswert?

Stephan schrieb:
> baue es Dir einfach
> selbst

das wollte ich eigentlich umgehen. Habe gedacht, dass es irgendwie 
möglich ist, die werte direkt als zahl und nicht als string zu 
speichern. Aber dann muss ich da wohl durch.
Hätte aber direkt noch eine Frage
1
                    if (0 == (xmlStrcmp(cur_node->name, (const xmlChar *)"state")))
2
                    {
3
//                        xmlNodeSetContent(cur_node->content, nameValue);
4
                        xmlNodeSetContent(cur_node, nameValue);
5
                        ret = 1;
6
                        break;
7
                    }

jetzt möchte ich den wert ändern.
Den node an für sich finde ich, aber 'xmlNodeSetContent' ändert nicht 
den Wert. nameValue ist auch ein xmlChar. welchen ich mit spintf von 
einem uint8_t erzeugt habe

von seere (Gast)


Lesenswert?

fassel schrieb:
> atoi habe ich leider nicht.

Das verstehe ich nicht. Du hast libxml2, programmierst in C und hast 
kein atoi? Aus welcher Plattform ist das? atoi ist doch "schon immer" 
(C89/C99/...) im Standard enthalten?

von Rolf M. (rmagnus)


Lesenswert?

fassel schrieb:
> das wollte ich eigentlich umgehen. Habe gedacht, dass es irgendwie
> möglich ist, die werte direkt als zahl und nicht als string zu
> speichern. Aber dann muss ich da wohl durch.

Was meinst du mit "direkt als Zahl"? Der Wert ist direkt als String 
vorhanden. Wenn du den als Zahl willst, muss er erst irgendwie in eine 
solche konvertiert werden. Dazu nimmt man in C z.B. strtol. Von atoi 
würde ich eher abraten, da es keine Möglichkeit vorsieht, einen Fehler 
zu erkennen. Wenn im String keine Zahl steht, sondern z.B. "Hallo", wird 
einfach stillschweigend 0 zurückgeliefert.

seere schrieb:
> fassel schrieb:
>> atoi habe ich leider nicht.
>
> Das verstehe ich nicht. Du hast libxml2, programmierst in C und hast
> kein atoi?

Verstehe ich auch nicht so ganz. Er benutzt auch printf(). Vielleicht 
ist ja dann wenigsten sscanf() vorhanden. Damit könnte man das zur Not 
auch machen.

von imonbln (Gast)


Lesenswert?

fassel schrieb:
> atoi habe ich leider nicht.

atoi ist in der stdlib.h das ist mindestens seit iso9899:1989 so. Wenn 
du das nicht hast, ist dein Compiler kaputt und sollte dringend 
ausgetauscht werden.

von Rolf M. (rmagnus)


Lesenswert?

imonbln schrieb:
> iso9899:1989

Das gibt es nicht. Du meinst ISO/IEC 9899:1990 oder ANSI X3.159-1989, 
die beide praktisch den selben Inhalt haben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.