2012-04-09 73 views
1

我用下面的代碼來解析C++中的XML文件。 http://www.codeproject.com/Articles/176236/Parsing-an-XML-file-in-a-C-C-program無法從C++中的XML解析類獲取字符串?

現在我想填寫hashmap中的數據。但無法做到這一點。錯誤說轉換不可能從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.. 

任何人都可以告訴我,我怎樣才能從這個類訪問字符串來填充hashmap?

錯誤是:

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_t而不是您在此處使用的純粹BSTR對象。 _bstr_t將負責爲您管理內存並使轉換更輕鬆(請參閱上面使用_bstr_t進行轉換的鏈接)。您仍然可以通過GetAddressGetBSTR方法將_bstr_t關閉到方法,具體取決於您是否需要可修改的引用(有關示例,請參閱_bstr_t上的文檔)。

+0

謝謝,它的作品完美。 – 2012-04-10 05:48:15