//写入数据到xml文档中
string szName = "C:\\Users\\BZL\\Desktop\\1.xml";
FileStorage fs(szName, FileStorage::WRITE);
// seq_node 是一个 seq 型的节点, 以它为父节点,存入10个数据
fs << "seq_node" << "[";
for (int i = 0; i < 10; ++i) {
fs << i;
}
fs << "]";
// 结果:<seq_node>0 1 2 3 4 5 6 7 8 9</seq_node>
// map_node 是一个 map 型节点, 以它为父节点,存入10个数据
fs << "map_node" << "{";
for (int i = 0; i < 10; ++i) {
fs << "node_" + to_string(i) << i;
}
fs << "}";
// 结果:
<map_node>
<node_0>0</node_0>
<node_1>1</node_1>
<node_2>2</node_2>
<node_3>3</node_3>
<node_4>4</node_4>
<node_5>5</node_5>
<node_6>6</node_6>
<node_7>7</node_7>
<node_8>8</node_8>
<node_9>9</node_9>
</map_node>
fs.release();
分割线/
string szName = "C:\\Users\\BZL\\Desktop\\1.xml";
FileStorage fs(szName, FileStorage::READ);
FileNode seqNode = fs["seq_node"];
for (int i = 0; i < 10; ++i)
{
int a = 0;
seqNode[i] >> a;
cout << a << endl;
}
/*
result:
0
1
2
3
4
5
6
7
8
9
*/
FileNode mapNode = fs["map_node"];
int b = 0;
//注释掉的无法读取子节点的值
//for (int i = 0; i < 10; ++i)
//{
// cout << "node_" + to_string(i) << endl;
// fs["map_node","node_" + to_string(i)] >> b;
// cout << b << endl;
//}
FileNodeIterator it = mapNode.begin();
for (; it != mapNode.end(); ++it)
{
*it >> b;
cout << b << endl;
}
/*
result:
0
1
2
3
4
5
6
7
8
9
*/
读取的内容如下:
<opencv_storage>
<seq_node> 0 1 2 3 4 5 6 7 8 9 </seq_node>
<map_node>
<node_0> 0 </node_0>
<node_1> 1 </node_1>
<node_2> 2 </node_2>
<node_3> 3 </node_3>
<node_4> 4 </node_4>
<node_5> 5 </node_5>
<node_6> 6 </node_6>
<node_7> 7 </node_7>
<node_8> 8 </node_8>
<node_9> 9 </node_9>
</map_node>
</opencv_storaget>