C++ 使用pugixml在XML文件中创建Parsin
嗨 我想使用XML文件作为配置文件,从中读取应用程序的参数。我在PugiXML库中遇到过,但是我在获取属性值方面遇到了问题。 我的XML文件看起来是这样的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 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()