2012-04-09 9 views
1

私は、C++でXMLファイルを解析するために次のコードを使用しました。 http://www.codeproject.com/Articles/176236/Parsing-an-XML-file-in-a-C-C-programC++のXML解析クラスから文字列を取得できませんか?

ここでデータをハッシュマップで埋めたいとします。しかし、それを行うことはできません。エラーは、BSTRからのstd :: stringへの変換が不可能であると言います。ここで

は、コードの一部です...

MSXML2::IXMLDOMNode *pIParentNode = NULL; 
//Variables to store attribute's name,type and text:  
     BSTR bstrAttrName, bstrAttrType, bstrAttrText; 

typedef std::tr1::unordered_map< std::string, std::string > hashmap;  
     hashmap numbers; 

     for(i = 0; i < (NodeListPtr->length); i++) 
     { 

      if (pIDOMNode) pIDOMNode->Release();    
      NodeListPtr->get_item(i, &pIDOMNode); 


      if(pIDOMNode) 
      {    

       pIDOMNode->get_nodeTypeString(&bstrNodeType); 

       //We process only elements (nodes of "element" type): 
       BSTR temp = L"element"; 
       pIDOMNode->get_nodeTypeString(&bstrNodeType); 

       //We process only elements (nodes of "element" type): 
       BSTR temp = L"element"; 

       if (lstrcmp((LPCTSTR)bstrNodeType, (LPCTSTR)temp)==0) 
       { 


        pIDOMNode->get_nodeName(&bstrItemNode);     
        printf("Node: %ls\n", bstrItemNode);   


        pIDOMNode->get_text(&bstrItemText); 
        printf("Text: %ls\n", bstrItemText); 

numbers[(std::string)bstrItemNode] = (std::string)bstrItemText; // Here error.. need string.. 

私は、次の試みたが、それだけで一つの文字を返します。

numbers[(char*)bstrItemNode] = (char*)bstrItemText; // return only 1 character..need whole string.. 

このクラスから文字列にアクセスして、ハッシュマップを埋め込む方法を教えてもらえますか?

エラーは次のとおりです。

error C2440: 'type cast' : cannot convert from 'BSTR' to 'std::string' 
1>  No constructor could take the source type, or constructor overload resolution was ambiguous 
1> : error C2440: 'type cast' : cannot convert from 'BSTR' to 'std::string' 
1>  No constructor could take the source type, or constructor overload resolution was ambiguous 

が私を助けてください、私はこだわっています。他の方法でも感謝します。ありがとう...

答えて

0

BSTRからstd :: stringにキャストすることはできません。あなたはconvert itでなければなりません。

BSTRのワイド文字列をサポートする副次的な理由として、現在使用している狭い文字列の代わりにstd::wstringを使用することをお勧めします。また、ここで使用している純粋なBSTRオブジェクトの代わりに_bstr_tを使用することをお勧めします。 _bstr_tはあなたのためにメモリを管理し、変換を容易にします(上記の変換で_bstr_tを使用するリンクを参照)。修正可能な参照が必要かどうかに応じて、GetAddressGetBSTRメソッドを使用してメソッドに_bstr_tを引き渡すことができます(例については_bstr_tのドキュメントを参照してください)。

+0

ありがとう、それは完璧に動作します。 –

関連する問題