【问题标题】:TinyXML2 returns Null?TinyXML2 返回 Null?
【发布时间】:2014-03-11 20:02:44
【问题描述】:

我目前正在将 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>

【问题讨论】:

    标签: c++ xml tinyxml2


    【解决方案1】:

    您在开始时挖掘得太深,请删除 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      • 2020-06-19
      • 2011-10-15
      • 2014-06-28
      相关资源
      最近更新 更多