integerzahl vom node in einer xml bekommen

Gast #6254817
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.