2011-05-23 28 views
1

嗨 我正在使用pugixml來處理xml文檔。我經歷的節點可以使用這種結構如何將pugi :: char_t *轉換爲字符串

pugi::xml_node tools = doc.child("settings"); 

    //[code_traverse_iter 
    for (pugi::xml_node_iterator it = tools.begin(); it != tools.end(); ++it) 
    { 
     //std::cout << "Tool:"; 
     cout <<it->name(); 

    } 

的問題是,它 - >名稱()返回pugi :: char_t迭代*,我需要將其轉換成的std :: string。可能嗎 ??我找不到

回答

0

According to the manualpugi::char_t要麼charwchar_t,這取決於你的磁帶庫配置上pugixml網站的任何信息。這樣可以在單個字節(ASCII或UTF-8)和雙字節(通常是UTF-16/32)之間切換。

這意味着你不需要改變任何東西。但是,如果您使用的是wchar_t*變種,你將不得不使用匹配的流對象:

#ifdef PUGIXML_WCHAR_MODE 
std::wcout << it->name(); 
#else 
std::cout << it->name(); 
#endif 

而且,既然你問,從中構建一個std::stringstd::wstring

#ifdef PUGIXML_WCHAR_MODE 
std::wstring str = it->name(); 
#else 
std::string str = it->name(); 
#endif 

或者,總是std::string這很少有你想要什麼!):

#ifdef PUGIXML_WCHAR_MODE 
std::string str = as_utf8(it->name()); 
#else 
std::string str = it->name(); 
#endif 

希望這有助於。

來源:粗略瀏覽一下「pugixml」文檔。

+0

我不是這些編譯器宏的粉絲。提供一個身份超載的as_wide(wchar_t *)'和'as_utf8(char *)'是否會更好,以便根據設置自動選擇正確的超載? – 2011-08-21 20:17:30

+0

定義「正確的過載」。正如你在上面看到的,不清楚你是否想要一個'std :: string'或一個'std :: wstring';你不能在返回類型上重載,並且你不能指望圖書館能夠推測你想要的。 – 2011-08-21 20:19:09

+0

'as_wide'總是返回'wstring','as_utf8'總是返回'string'。我們只是重載參數類型,即使在沒有任何事情的情況下也可以工作。 – 2011-08-21 20:20:02