如何将pugi :: char_t *转换为字符串

时间:2011-05-23 20:32:14

标签: c++ xml pugixml

您好 我正在使用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-&gt; name()返回pugi :: char_t *,我需要将其转换为std :: string。可能吗 ??我在pugixml网站上找不到任何信息

2 个答案:

答案 0 :(得分:0)

According to the manualpugi::char_t可以是charwchar_t,具体取决于您的图书馆配置。这样您就可以在单个字节(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”文档。

答案 1 :(得分:0)

你也可以使用 stringstream,

std::stringstream ss;
ss << it->name();

std::string strValue = ss.str();

ps:不要忘记包含

#include <sstream>