[C++] vreemd probleem met XML parsen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • evolution536
  • Registratie: Maart 2009
  • Laatst online: 05-06-2024
Ik ben bezig met het bouwen van een wrapper class in C++. Deze class gebruikt RapidXML en zorgt in feite voor simpele functionaliteit voor het schrijven en lezen van een configuratiebestand. Ik loop nu echter tegen een probleem aan dat ik nergens terug kan vinden. De naam en waarde van de XML nodes die ik tegen kom kloppen niet. Daarintegen kloppen de lengte van zowel de naam als waarde van deze node wel! Het maakt niet uit welke node ik gebruik. De code is als volgt.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string GameConfiguration::ReadValue(const char *_key)
{
    xml_node<> *root = mDocument.first_node();
    for (xml_node<> *entry = root->first_node(); entry; entry = entry->next_sibling())
    {
        string test = entry->first_node()->value();
        if (test.compare(_key) == 0)
        {
            if (xml_node<> *nValue = entry->first_node("Value"))
            {
                return nValue->value();
            }
        }
    }
    return NULL;
}


Visual Studio komt met een runtime error op het moment dat ik test.compare() gebruik. Hij geeft aan dat er sprake is van een invalid null pointer. De "_key" bevat op dat moment de waarde "test". Ik heb dit ook gecontroleerd. Ik verdenk dus de waarde van de variabele "string test" op verkeerde inhoud.

De naam en inhoud van de node waarin ik bezig ben, in dit geval "entry" bevatten een soort ASCII string met allemaal i's Dit ziet er als volgt uit.

Afbeeldingslocatie: http://i49.tinypic.com/314xfll.png

Kan iemand me misschien helpen?

Acties:
  • 0 Henk 'm!

  • J-deB
  • Registratie: Juni 2011
  • Laatst online: 12-04-2022
Heb je al gekeken naar de value van je xmlnodes ( root & entry ) zelf?

Acties:
  • 0 Henk 'm!

  • cpt.spiff
  • Registratie: Augustus 2009
  • Laatst online: 20-02 14:29
Een typische gotcha van rapidxml is dat functies als value() pointers returnem naar de oorspronkelijk geparste tekst.

Weet je zeker dat de tekst die je aanbood aan de parse-functie nog steeds bestaat en niet inmiddels is vrijgegeven?

Acties:
  • 0 Henk 'm!

  • evolution536
  • Registratie: Maart 2009
  • Laatst online: 05-06-2024
cpt.spiff schreef op zaterdag 14 juli 2012 @ 00:40:
Weet je zeker dat de tekst die je aanbood aan de parse-functie nog steeds bestaat en niet inmiddels is vrijgegeven?
Dat was het probleem! Toch vind ik het vreemd dat rapidXML de plain text in het geheugen houdt, en niet de tekst in objecten laadt, nou ja anyway, het probleem is opgelost, dankjewel!

Acties:
  • 0 Henk 'm!

  • evolution536
  • Registratie: Maart 2009
  • Laatst online: 05-06-2024
Natuurlijk lijkt het me even handig als ik de oplossing die ik gebruikt heb post. Hier kunnen anderen nog iets aan hebben. De volgende functie verhielp mijn probleem.

code:
1
2
3
4
inline char *GameConfiguration::stralloc(const char *str)
{
    return mDocument.allocate_string(str);
}