pugixml 其中一个节点读取和写入属性doubel数组
时间: 2023-07-16 17:13:41 浏览: 117
读写XML节点
假设你有一个XML文档如下:
```xml
<root>
<node>
<value x="1.0" y="2.0" z="3.0" />
</node>
</root>
```
你可以使用pugixml库读取和写入属性double数组,代码示例如下:
```c++
#include "pugixml.hpp"
#include <iostream>
int main()
{
pugi::xml_document doc;
if (!doc.load_file("example.xml"))
return 1;
// 读取属性double数组
pugi::xml_node value_node = doc.select_node("/root/node/value").node();
double x, y, z;
if (sscanf(value_node.attribute("x").value(), "%lf", &x) != 1)
return 1;
if (sscanf(value_node.attribute("y").value(), "%lf", &y) != 1)
return 1;
if (sscanf(value_node.attribute("z").value(), "%lf", &z) != 1)
return 1;
double array[3] = { x, y, z };
std::cout << "Read array: " << array[0] << ", " << array[1] << ", " << array[2] << std::endl;
// 写入属性double数组
array[0] = 4.0;
array[1] = 5.0;
array[2] = 6.0;
char buffer[64];
snprintf(buffer, sizeof(buffer), "%.17g", array[0]);
value_node.attribute("x").set_value(buffer);
snprintf(buffer, sizeof(buffer), "%.17g", array[1]);
value_node.attribute("y").set_value(buffer);
snprintf(buffer, sizeof(buffer), "%.17g", array[2]);
value_node.attribute("z").set_value(buffer);
doc.save_file("example.xml");
return 0;
}
```
这个示例中,首先使用`doc.select_node`函数选取了属性节点`value`,然后使用`sscanf`函数读取属性double数组。在写入属性double数组时,使用`sprintf`函数将double值转换为字符串,然后使用`set_value`函数设置属性值。最后使用`doc.save_file`函数将修改后的XML文档保存到文件。
阅读全文