Как преобразовать pugi :: char_t * в строку - PullRequest
2 голосов
/ 24 мая 2011

Привет Я использую 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

1 Ответ

0 голосов
/ 24 мая 2011

В соответствии с руководством , 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".

...