1
我想用C++輸入和使用rapidxml
xml_document<> doc;
ifstream myfile("map.osm");
doc.parse<0>(myfile);
在這一行做這樣的事情使用rapidxml並收到以下錯誤
多個標記解析 - 參數無效「考生:void parse(char *)' - Symbol'parse'無法解析
文件大小可能高達幾兆字節。
請幫助
我想用C++輸入和使用rapidxml
xml_document<> doc;
ifstream myfile("map.osm");
doc.parse<0>(myfile);
在這一行做這樣的事情使用rapidxml並收到以下錯誤
多個標記解析 - 參數無效「考生:void parse(char *)' - Symbol'parse'無法解析
文件大小可能高達幾兆字節。
請幫助
你必須將文件加載到一個null作爲這裏的官方文檔中指定的第一個終止字符緩衝區。
剛剛看了你的文件的內容到一個char數組,使用這個數組傳遞給xml_document::parse()
功能。
如果您正在使用ifstream
,你可以使用類似下面的讀取整個文件內容的緩衝區
ifstream file ("test.xml");
if (file.is_open())
{
file.seekg(0,ios::end);
int size = file.tellg();
file.seekg(0,ios::beg);
char* buffer = new char [size];
file.read (buffer, size);
file.close();
// your file should now be in the char buffer -
// use this to parse your xml
delete[] buffer;
}
請注意,我還沒有編譯上面的代碼,只是從內存中寫,但這是粗略的想法。有關確切的詳細信息,請參閱ifstream
的文檔。無論如何,這應該有助於你開始。
嘿,非常感謝它的工作。但並不完美。有些時候它工作正常,並且緩衝區完全從文件獲取輸入,但有些時候它在緩衝區末尾有一些垃圾值,這是語句 doc.parse <0>(buffer); 失敗,並在運行未編譯時出現以下錯誤。 「此應用程序已請求運行時終止它在一個不尋常的方式 請與應用程序的支持團隊以獲取更多信息 終止叫做拋出‘rapidxml :: PARSE_ERROR’ 什麼()的一個實例之後:預期<」 請幫忙 – 2012-08-05 18:06:33
是的,你需要從解析中捕捉異常。如果你的文件中有一些意外的垃圾,解析會拋出錯誤。如果您使用try/catch塊來捕獲該錯誤並處理它。並且不要忘記,當你將文件讀入char緩衝區時,應該確保緩衝區像文檔所說的那樣終止。這意味着將緩衝區創建爲比文件大一個字節,將整個緩衝區memset設爲零,然後將文件讀入緩衝區。當然,如果你的xml文件包含錯誤,那麼你就無能爲力 - 這就是爲什麼這個異常拋出 – mathematician1975 2012-08-05 19:09:57
感謝很多數學家1975。問題在於緩衝區的零終止。我在最後將最後一個字符設置爲零,它工作。 – 2012-08-06 10:33:28