#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;
}
}