0

可能な重複:
rapidxml:ノードを反復する方法は?最後の兄弟を除外します

RapidXML を使用して XML ファイルから情報を読み取ろうとしていますが、うまくいきません。

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) を取得できません。

私は何をすべきか?

4

1 に答える 1

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");
于 2012-11-06T15:04:16.193 に答える