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>
4

1 回答 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;
}
于 2014-04-09T20:14:45.377 回答