2012-11-06 60 views
-1

可能重複讀取的信息:
rapidxml: how to iterate through nodes? Leaves out last sibling如何從一個XML文件C++

我試着去REAS使用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。

我該怎麼辦?

+1

我認爲你應該使用一個循環遍歷節點。 – 2012-11-06 14:55:23

回答

1

「DATETIME」和「模式」是內部節點,以「MODEMESSAGE」,因此您需要訪問他們像這樣:

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