首    页 界面/窗口 网络/通讯 数据库 组件开发 图像/多媒体 NET/Web 其它技术 源码下载 资料下载 软件共享 软件外包 曲艺杂谈
栏目导航:  首    页  |  界面/窗口  |  树型控件   


读取XML并在TreeCtrl中显示


原作者:SammyLan    源出处:CSDN    发布者:施昌权    发布类型:转载    发布日期:2008-10-13

                     

//Xml.h文件

#pragma once

#import <msxml.dll> named_guids

using namespace MSXML;

/*

1.stdafx.h中添加一下语句

#import <msxml.dll> named_guids

using namespace MSXML;

2.Treehas Buttons,Has Lines,Lines at Root,Scroll必须设置为TRUE

*/

#include"smMacro.h"

class DECLSPEC CXml

   CTreeCtrl *m_tree;

   void DisplayChildren(HTREEITEM hParent, MSXML::IXMLDOMNodePtr pParent);

   HTREEITEM DisplayChild(HTREEITEM hParent, MSXML::IXMLDOMNodePtr pChile);

public:

   CXml();

   ~CXml(void);

   int DisplayXML(CString& strFileName,CTreeCtrl&lstXML);  

};

//Xml.cpp文件 

CXml::CXml(void)

{

   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   CoInitialize(NULL);  

}

CXml::~CXml(void)

{

   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   ::CoUninitialize();

}

int CXml::DisplayXML(CString& strFileName,CTreeCtrl& lstXML)

{

   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   MSXML::IXMLDOMDocumentPtr m_plDomDocument;

   MSXML::IXMLDOMElementPtr  m_pDocRoot;

   HRESULT hr = m_plDomDocument.CreateInstance(MSXML::CLSID_DOMDocument);

   if (FAILED(hr))

   {

      _com_error er(hr);

      AfxMessageBox(er.ErrorMessage());   

   }

   m_tree=&lstXML;

   _bstr_t bstrFileName=strFileName.AllocSysString () ;

   variant_t vResult;

   vResult=m_plDomDocument->load(bstrFileName);

   if ((bool)vResult==TRUE)

   {

      m_pDocRoot = m_plDomDocument->documentElement;

      DisplayChildren(TVI_ROOT, m_pDocRoot);

      if (0==m_tree->GetCount())

      {

         m_tree->InsertItem("Empty Document");

      }    

   }

   else

   {

      m_tree->InsertItem("Document FAILED to load");

      TRACE("Document FAILED to load");

   }

   return 0;

}

void CXml::DisplayChildren(HTREEITEM hParent, MSXML::IXMLDOMNodePtr pParent)

{

   HTREEITEM hItem=DisplayChild(hParent,pParent);

   for (MSXML::IXMLDOMNodePtr pChild=pParent->firstChild;NULL!=pChild;

      pChild=pChild->nextSibling)

   {

      DisplayChildren(hItem,pChild);

   }

}

HTREEITEM CXml::DisplayChild(HTREEITEM hParent, MSXML::IXMLDOMNodePtr pChild)

{

   CString strElement;

   if (MSXML::NODE_TEXT==pChild->nodeType)

   {

      strElement=(LPCTSTR)pChild->text;

   }

   else

      strElement=(LPCTSTR)pChild->nodeName;

   return m_tree->InsertItem(strElement,hParent);

}


关于我们 版权声明 广告服务 联系我们 友情链接 加入收藏
站长:施昌权    Email:scq2099yt@163.com    MSN:scq2099yt@live.cn    QQ:14046300    本站QQ群:67202409
Copyright © 2008     卓为VC(www.joyvc.cn)    All Rights Reserved    建议分辨率 1024×768
本站由施昌权制作维护
京ICP备09012297号