TinyXML2 возвращает Null?

0

В настоящее время я внедряю TinyXML2 в игровой движок. У меня есть этот код, который теоретически должен работать, если я не слишком долго смотрел на него. Может ли кто-нибудь помочь? Очень признателен!

В основном он возвращает Null.

const char *CXMLManager::GetWeaponGeometry( const char *pWeaponFile, const char *pParam )
{
    LoadWeaponXML( pWeaponFile );

    const char *pData;

    XMLElement* root = doc.FirstChildElement()->FirstChildElement( "geometry" );
    for(XMLElement* e = root->FirstChildElement("param"); e != NULL; e = e->NextSiblingElement("param"))
    {
        pData = e->Attribute( pParam );
    }

    return pData;
}

И вот моя настройка XML.

<weapondata>
    <param bullet_damage='2' />
    <param melee_damage='42' />
    <geometry>
        <param fp_mesh='models/weapons/v_pist_deagle.mdl' />
        <param tp_mesh='models/weapons/w_pist_deagle.mdl' />
    </geometry>
</weapondata>
Теги:
tinyxml2

1 ответ

0

Вы вначале копаете слишком глубоко, удалите один из вызовов FirstChildElement. И затем в итерации подэлементов param вы, кажется, всегда возвращаете последний, я изменил так, чтобы возвращался первый param с запрошенным атрибутом.

const char *CXMLManager::GetWeaponGeometry( const char *pWeaponFile, const char *pParam )
{
    LoadWeaponXML( pWeaponFile );
    if (XMLElement* root = doc.FirstChildElement( "geometry" ))
    {
        for (XMLElement* e = root->FirstChildElement("param");
             e != NULL;
             e = e->NextSiblingElement("param"))
        {
            if (const char *pData = e->Attribute( pParam ))
                return pData;
        }
    }

    return NULL;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню