Reputation: 106
I've been trying to write a nested .xml file with a vector<vector<Point>>
data type in OpenCV (on C++).
However, I have always one extra tag created within the loops:
string filename = "test.xml";
FileStorage fs(filename, FileStorage::WRITE);
fs << "data" << "[";
for (int i = 0; i < myvector.size(); ++i)
{
//Write each vector
fs << "{:" << "vector" << "[:";
for (int j = 0; j < myvector[i].size(); ++j)
{
fs << "{:" << "point";
//Write each point
fs << "{" << "x" << myvector[i][j].x << "y" << myvector[i][j].y << "}";
fs << "}"; // close point
}
fs << "]" << "}"; // close vector
}
fs << "]"; // close data
fs.release();
The result is:
<?xml version="1.0"?>
<opencv_storage>
<data>
<_><vector><_><point>
<x>162</x>
<y>30</y></point></_>
<_><point>
<x>162</x>
<y>31</y></point></_>
<_><point>
<x>161</x>
<y>32</y></point></_>
</vector></_>
</data>
</opencv_storage>
while the expected output should be (also need to change tag name within the loop)
<?xml version="1.0"?>
<opencv_storage>
<data>
<vector>
<point1>
<x>162</x>
<y>30</y>
</point1>
<<point2>
<x>162</x>
<y>31</y>
</point2>
<point3>
<x>161</x>
<y>32</y>
</point3>
</vector>
</data>
</opencv_storage>
Any idea about what may cause this problem? Thanks!
Upvotes: 1
Views: 767
Reputation: 1166
There are brackets for both sequences ("[") and mappings ("{"). You can try this:
string filename = "test.xml";
FileStorage fs(filename, FileStorage::WRITE);
fs << "data" << "{";
for (int i = 0; i < myvector.size(); ++i)
{
//Write each vector
fs << "vector" << "{";
for (int j = 0; j < myvector[i].size(); ++j)
{
fs << "point" << "{";
//Write each point
fs << "x" << myvector[i][j].x << "y" << myvector[i][j].y ;
fs << "}"; // close point
}
fs << "}"; // close vector
}
fs << "}"; // close data
fs.release();
More info here
Upvotes: 2