Как конвертировать 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>
Другие вопросы по тегам