integerzahl vom node in einer xml bekommen

Gast #6254817
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.
Gast #6254856
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
}
Gast #6254881
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
#6259580
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren