2014-02-13 51 views
0

我已經從網站加載了一個xml文檔。 然後我嘗試用pugixml來解析它。pugixml錯誤解析文檔C++

ParseXml::parseTrainsXml(char source[]) {  
    __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK:LC: [ %s ]", source); 
    size_t size = sizeof(source); 

    pugi::xml_document doc; 

    pugi::xml_parse_result result = doc.load_buffer(source, size); 

    __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK:LC: [ %s ]", 
       result.description()); 
} 

當我嘗試加載它時出現以下錯誤:「解析文檔聲明/處理指令時出錯」。所以,這並沒有給我很多幫助,所以我試圖查找它。 http://pugixml.googlecode.com/svn/tags/latest/docs/manual/loading.html

status_bad_pi意味着停止解析由於不正確的文檔聲明/處理指令

所以基本上,我不知道爲什麼它不工作。當我聲明像這樣的xml:

const char source[] = "my xml here"; 

它確實工作,如果我聲明它那樣。任何人都知道會出現什麼問題?

回答

1
size_t size = sizeof(source); 

此行不正確。源被視爲指向char的指針,所以sizeof總是4(或8)=>你只能得到解析的前4/8個字節。由於您將不完整的緩衝區傳遞給pugixml(可能爲「<?xm」),因此pugixml將其標記爲不正確。

您必須將正確的緩衝區大小傳遞給您的函數,或者如果緩衝區保證以空終止(不知道如何獲得緩衝區),則可以使用doc.load(source)而不是doc .load_buffer(來源,大小)。