Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用pugixml在XML文件中创建Parsin_C++_Xml_Parsing_Xml Parsing - Fatal编程技术网

C++ 使用pugixml在XML文件中创建Parsin

C++ 使用pugixml在XML文件中创建Parsin,c++,xml,parsing,xml-parsing,C++,Xml,Parsing,Xml Parsing,嗨 我想使用XML文件作为配置文件,从中读取应用程序的参数。我在PugiXML库中遇到过,但是我在获取属性值方面遇到了问题。 我的XML文件看起来是这样的 <?xml version="1.0"?> <settings> <deltaDistance> </deltaDistance> <deltaConvergence>0.25 </deltaConvergence> <deltaMergi

嗨 我想使用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>

0.25
1
2.
0.7
0.7
0.3
0.6
0.2
2.25
为了比较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();  
    }

}
void ReadConfig(char*文件)
{
pugi::xml_文档文档;
如果(!doc.load_file(file))返回false;
pugi::xml_node tools=doc.child(“设置”);
//[代码]
for(pugi::xml_node_iterator it=tools.begin();it!=tools.end();+it)
{

cout我认为您的问题在于您希望值存储在节点本身中,但实际上它位于子文本节点中。快速扫描文档表明您可能需要

it->child_value()
而不是

it->value()

您正在尝试获取给定节点的所有属性,还是希望按名称获取属性

对于第一种情况,您应该能够使用以下代码:

unsigned int numAttributes = node.attributes();
for (unsigned int nAttribute = 0; nAttribute < numAtributes; ++nAttribute)
{
    pug::xml_attribute attrib = node.attribute(nAttribute);
    if (!attrib.empty())
    {
         // process here
    }
}

如果希望将纯文本数据存储到节点中,如

<name> My Name</name>
如果你想存储数据类型,你需要设置一个属性。我认为你想要的是能够直接读取值,对吗

在编写节点时

rootNode.append_child("version").append_attribute("value").set_value(0.11)
当你想读的时候

rootNode.child("version").attribute("version").as_double()

至少我是这样做的!

欢迎使用SO。要正确使用XML格式,只需确保它缩进至少4个空格(或使用编辑器中的
{}
按钮)
rootNode.append_child("name").append_child(node_pcdata).set_value("My name");
rootNode.append_child("version").append_attribute("value").set_value(0.11)
rootNode.child("version").attribute("version").as_double()