使用pugixml的Parsin XML文件

geo*_*rge 2 c++ xml parsing xml-parsing

嗨,我想使用XML文件作为配置文件,我将从中读取我的应用程序的参数.我遇到了PugiXML库,但是我遇到了获取属性值的问题.我的XML文件看起来像那样

<?xml version="1.0"?>
<settings>
    <deltaDistance> </deltaDistance>
    <deltaConvergence>0.25 </deltaConvergence> 
    <deltaMerging>1.0 </deltaMerging> 
    <m> 2</m>
    <multiplicativeFactor>0.7 </multiplicativeFactor> 
    <rhoGood> 0.7 </rhoGood>
    <rhoMin>0.3 </rhoMin>
    <rhoSelect>0.6 </rhoSelect>
    <stuckProbability>0.2 </stuckProbability> 
    <zoneOfInfluenceMin>2.25 </zoneOfInfluenceMin>
</settings>
Run Code Online (Sandbox Code Playgroud)

要削减XML文件,我使用此代码

void ReadConfig(char* file)
{
    pugi::xml_document doc;
    if (!doc.load_file(file)) return false;

    pugi::xml_node tools = doc.child("settings");

    //[code_traverse_iter
    for (pugi::xml_node_iterator it = tools.begin(); it != tools.end(); ++it)
    {
        cout<<it->name() <<    " " <<    it->attribute(it->name()).as_double();  
    }

}
Run Code Online (Sandbox Code Playgroud)

我也试图用这个

void ReadConfig(char* file)
{
    pugi::xml_document doc;
    if (!doc.load_file(file)) return false;

    pugi::xml_node tools = doc.child("settings");

    //[code_traverse_iter
    for (pugi::xml_node_iterator it = tools.begin(); it != tools.end(); ++it)
    {
        cout<<it->name() <<    " " <<    it->value();
    }

}
Run Code Online (Sandbox Code Playgroud)

属性是corectly加载的,但所有值都等于0.有人可以告诉我我做错了什么吗?

Jim*_*son 7

我认为您的问题是您希望将值存储在节点本身中,但它确实存在于CHILD文本节点中.快速扫描文档显示您可能需要

it->child_value()
Run Code Online (Sandbox Code Playgroud)

代替

it->value()
Run Code Online (Sandbox Code Playgroud)