Как конвертировать pugi::char_t* в строку
Привет я использую pugixml для обработки документов XML. Я перебираю узлы, используя эту конструкцию
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();
}
проблема в том, что it->name() возвращает pugi::char_t*, и мне нужно преобразовать его в std::string. Является ли это возможным?? Я не могу найти какую-либо информацию на сайте pugixml
2 ответа
Согласно инструкции, pugi::char_t
либо char
или же wchar_t
в зависимости от конфигурации вашей библиотеки. Это сделано для того, чтобы вы могли переключаться между одиночными байтами (ASCII или UTF-8) и двойными байтами (обычно UTF-16/32).
Это означает, что вам не нужно ничего менять. Однако, если вы используете wchar_t*
вариант, вам придется использовать соответствующий объект потока:
#ifdef PUGIXML_WCHAR_MODE
std::wcout << it->name();
#else
std::cout << it->name();
#endif
И, так как вы просили, чтобы построить std::string
или же std::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".
вы также можете использовать stringstream,
std::stringstream ss;
ss << it->name();
std::string strValue = ss.str();
ps: не забудьте включить
#include <sstream>