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 Web サイトで情報が見つかりません

4

2 に答える 2

0

マニュアルによると、ライブラリの構成に応じて、またはのpugi::char_tいずれかです。これは、1 バイト (ASCII または UTF-8) と 2 バイト (通常は UTF-16/32) を切り替えることができるようにするためです。charwchar_t

つまり、何も変更する必要はありません。ただし、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

または、常に a 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 に答える