pugixml读取某节点属性double p[3],没有属性时写入默认值并且保存记录 最简便的写法
时间: 2023-07-15 20:15:07 浏览: 45
可以使用pugixml库提供的函数`attribute()`来读取节点属性,并且使用`set_attribute()`函数来设置节点属性及其默认值。以下是一个示例代码:
```c++
#include "pugixml.hpp"
#include <iostream>
int main() {
pugi::xml_document doc;
if (!doc.load_file("input.xml")) {
std::cerr << "Failed to load input.xml\n";
return 1;
}
// 获取节点
pugi::xml_node node = doc.child("root").child("node");
// 读取节点属性,默认值为0.0
double p[3] = {node.attribute("p1").as_double(0.0),
node.attribute("p2").as_double(0.0),
node.attribute("p3").as_double(0.0)};
// 检查是否有属性缺失,如果有则设置默认值并保存记录
if (!node.attribute("p1")) {
node.append_attribute("p1").set_value(0.0);
std::cout << "p1 attribute missing, set default value 0.0\n";
}
if (!node.attribute("p2")) {
node.append_attribute("p2").set_value(0.0);
std::cout << "p2 attribute missing, set default value 0.0\n";
}
if (!node.attribute("p3")) {
node.append_attribute("p3").set_value(0.0);
std::cout << "p3 attribute missing, set default value 0.0\n";
}
// 保存修改
if (!doc.save_file("output.xml")) {
std::cerr << "Failed to save output.xml\n";
return 1;
}
// 输出读取结果
std::cout << "p1 = " << p[0] << "\n";
std::cout << "p2 = " << p[1] << "\n";
std::cout << "p3 = " << p[2] << "\n";
return 0;
}
```
在上面的示例中,`as_double()`函数用于将属性转换为`double`类型,如果属性不存在则返回默认值。`set_value()`函数用于设置属性值,如果属性不存在则添加新的属性。如果属性缺失,则输出提示信息并设置默认值。最后,使用`save_file()`函数保存修改后的XML文件。