编写读取XML文件的简单入门

#import   <msxml.dll>   named_guids 
using   namespace   MSXML; 

class   CTestDlg  :   public   CDialog 

       ...... 
protected: 
       CTreeCtrl   m_tree; 
       MSXML::IXMLDOMDocumentPtr   m_plDomDocument; 
       MSXML::IXMLDOMElementPtr   m_pDocRoot; 
       ..... 
}; 

//AaaaDlg.cpp 
BOOL   CTestDlg::OnInitDialog() 

...... 
       //   TODO:   在此添加额外的初始化代码 
       //Initialize   COM 
       ::CoInitialize(NULL); 

       HRESULT   hr   = 
       m_plDomDocument.CreateInstance(MSXML::CLSID_DOMDocument); 
       if(   FAILED(hr)) 
       { 
              _com_error   er(hr); 
              AfxMessageBox(er.ErrorMessage()); 
              EndDialog(1); 
       } 
       return   TRUE;     //   除非设置了控件的焦点,否则返回   TRUE 


void   CTestDlg::OnBnClickedOk() 

       CFileDialog   fileDlg(TRUE); 

        if(IDOK==fileDlg.DoModal()) 
        {
                m_tree.DeleteAllItems();

                CString   strFileName=(fileDlg.GetPathName());

                _bstr_t   bstrFileName; 
                bstrFileName = strFileName.AllocSysString(); //CString 专为 BSTR

               variant_t   vResult; 
                vResult   =   m_plDomDocument->load(bstrFileName);

                if( ( (bool)vResult )==TRUE )//success!
                {
   
                        m_pDocRoot   =   m_plDomDocument->documentElement; 
                        CString str = (LPCTSTR)m_pDocRoot->nodeName;

                        HTREEITEM hItem = AddToTree(NULL,str);

                        GetChild(hItem,m_pDocRoot);
                }
                else
                {
                        m_tree.InsertItem( "Document   FAILED   to   load! "); 
                }
        }




HTREEITEM CTestDlg::AddToTree(HTREEITEM pParent, CString sText)
{
       HTREEITEM hItem = m_tree.InsertItem(sText,pParent);
       return hItem;
}


void CTestDlg::GetChild(HTREEITEM hParent, MSXML::IXMLDOMNodePtr pParent)
{
       MSXML::IXMLDOMNodePtr pChild = pParent->firstChild;

        while ( NULL!=pChild )
        {
                CString str;
                str = (LPCTSTR)pChild->nodeName;

                if ( !strcmp( str, "#text") )
                {
                        break;
                }

                HTREEITEM hItem = AddToTree(hParent,str);

  /*            BSTR s;
                pChild->get_text(&s);
                CString strText;
                strText = s;
  
                CString strTmp;
                strTmp.Format("%s:%s",str,strText);

                CFile f;
                if ( f.Open((LPCTSTR)"c:\\1.txt", CFile::modeWrite) )
                {
                        f.SeekToEnd();
                        f.Write( (LPCTSTR)strTmp, strTmp.GetLength() );
                } 
                f.Close();*/


                GetChild(hItem, pChild);

                pChild = pChild->nextSibling;
        }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值