3

您好我正在使用 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 网站上找不到任何信息

4

2 回答 2

0

根据手册pugi::char_tcharwchar_t,具体取决于您的库配置。这样您就可以在单字节(ASCII 或 UTF-8)和双字节(通常是 UTF-16/32)之间切换。

这意味着您无需将其更改为任何内容。但是,如果您使用wchar_t*变体,则必须使用匹配的流对象:

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

而且,既然你问了,从它构造一个std::stringor 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”文档。

于 2011-05-23T20:38:22.310 回答
0

您也可以使用字符串流,

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

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

ps:别忘了包括

#include <sstream>
于 2021-05-17T10:31:05.697 回答