Атрибуты — Как читать информацию из файла XML Переполнение стека

Возможный дубликат:
rapidxml: как перебирать узлы? Оставляет последнего брата

Я пытаюсь получить некоторую информацию из файла XML с использованием rapidXML, но не могу заставить его работать.

Файл XML выглядит так:

<MODESMESSAGE>
<DATETIME>20070622141943</DATETIME>
<MODES>400F2B</MODES>
<CALLSIGN>BAW134</CALLSIGN>
<ALTITUDE>120300</ALTITUDE>
<GROUNDSPEED>451</GROUNDSPEED>
<TRACK>234</TRACK>
<VRATE>0</VRATE>
<AIRSPEED></AIRSPEED>
<LATITUDE>-14.1102</LATITUDE>
<LONGITUDE>-31.5789</LONGITUDE>
</MODESMESSAGE>

И вот так выглядит мой код

#include <iostream>
#include <cstdlib>
#include "rapidxml.hpp"#include <iostream>
#include <fstream>
#include <vector>

using namespace rapidxml;
using namespace std;

xml_document<> doc;    // character type defaults to char

int main(){
ifstream myfile("test.xml");
xml_document<> doc;
vector<char> buffer((istreambuf_iterator<char>(myfile)), istreambuf_iterator<char>( ));
buffer.push_back('\0');
doc.parse<0>(&buffer[0]);
xml_node<> *node = doc.first_node();
xml_attribute<> *att = node->first_attribute();
cout << node->name();
cout << att->name();
}

Я могу скомпилировать программу, но когда я ее запускаю, она просто перестает работать. Я могу получить первый узел (MODEMESSAGE), но не могу получить остальные из них, то есть DATETIME или MODES.

Что я должен делать?

-1

Решение

«DATETIME» и «MODES» являются внутренними узлами «MODEMESSAGE», поэтому вы должны обращаться к ним следующим образом:

xml_node<> *messagenode = doc.first_node("MODEMESSAGE");
xml_node<> *datetimenode = messagenode->first_node("DATETIME");
xml_node<> *modesnode = messagenode->first_node("MODES");
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]