После того, как вы загрузили xml в объект документа, вы можете использовать first_node()
, чтобы получить указанный дочерний узел (или только первый); тогда вы можете использовать next_sibling()
, чтобы пройти через всех своих братьев и сестер. Используйте first_attribute()
, чтобы получить указанный (или только первый) атрибут узла. Это идея того, как может выглядеть код:
#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>
#include <rapidxml.hpp>
using std::cout;
using std::endl;
using std::ifstream;
using std::vector;
using std::stringstream;
using namespace rapidxml;
int main()
{
ifstream in("test.xml");
xml_document<> doc;
std::vector<char> buffer((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>( ));
buffer.push_back('\0');
doc.parse<0>(&buffer[0]);
vector<int> vecID;
// get document's first node - 'player' node
// get player's first child - 'frames' node
// get frames' first child - first 'frame' node
xml_node<>* nodeFrame = doc.first_node()->first_node()->first_node();
while(nodeFrame)
{
stringstream ss;
ss << nodeFrame->first_attribute("id")->value();
int nID;
ss >> nID;
vecID.push_back(nID);
nodeFrame = nodeFrame->next_sibling();
}
vector<int>::const_iterator it = vecID.begin();
for(; it != vecID.end(); it++)
{
cout << *it << endl;
}
return 0;
}