Chinaunix首页 | 论坛 | 博客
  • 博客访问: 230479
  • 博文数量: 55
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 530
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-22 17:59
文章分类

全部博文(55)

文章存档

2015年(2)

2011年(1)

2010年(1)

2009年(18)

2008年(16)

2007年(17)

我的朋友

分类: C/C++

2009-09-17 20:29:38

文件: config.rar
大小: 0KB
下载: 下载
1、利用在解析XML文件时,首先在stdafx.h文件中,包含如下语句:
      #import
编译工程,在Debug目录下生成,msxml4.tlh、msxml4.tli文件,然后注释掉 #import ,在Stdafx.h文件中包含如下语句。
      #include
      #include "msxml4.tlh"
      using namespace MSXML2;
2、在app文件的InitInstance()函数中初始化com组件
 if(!AfxOleInit())//初始化COM库
 {
  AfxMessageBox("OLE初始化出错!");
  return FALSE;
 }
 
3、下面是解析Config.xml文件的例子
 TCHAR buf[_MAX_PATH];
 GetModuleFileName(AfxGetApp()->m_hInstance, buf, _MAX_PATH);
 
 TCHAR drive[_MAX_DRIVE];
 TCHAR dir[_MAX_DIR];
 TCHAR fname[_MAX_FNAME];
 TCHAR ext[_MAX_EXT];
 _tsplitpath( buf, drive, dir, fname, ext );
 
 CString file = drive;
 file += dir;
 file += _T("config.xml");
 
 MSXML2::IXMLDOMDocumentPtr pDoc;
 
 try
 {
  _variant_t vr ;
  CString strValue;
  pDoc.CreateInstance(_uuidof(MSXML2::DOMDocument));
  pDoc->Putasync(VARIANT_FALSE);
  
  VARIANT_BOOL vbRes = pDoc->load(_bstr_t(file));
  if(vbRes == VARIANT_FALSE)
  {
   CString strMsg;
   strMsg.Format(_T("打开配置文件'%s'失败."),file);
   MessageBox(strMsg, _T("提示"), MB_OK|MB_ICONWARNING);
   return ;
  }
  IXMLDOMElementPtr pNode;
  pNode = pDoc->selectSingleNode(_bstr_t("/config/ADOCnn"));
  IXMLDOMNodePtr pText = pNode->GetfirstChild();
  vr = pText->GetnodeValue();
  vr.ChangeType(VT_BSTR);
  strValue = vr.bstrVal;
  pNode = pDoc->selectSingleNode(_bstr_t("/config/ApplicationName"));
  vr = pNode->getAttribute("appname");
  vr.ChangeType(VT_BSTR);
  strValue = vr.bstrVal;
  pNode = pDoc->selectSingleNode(_bstr_t("/config/intro"));
  IXMLDOMNodePtr p1 = pNode->GetfirstChild();
  vr = p1->GetnodeValue();
  vr.ChangeType(VT_BSTR);
  strValue = vr.bstrVal;
  pNode = pDoc->selectSingleNode(_T("/config/MsgServer"));
  _variant_t vrSrvIp = pNode->getAttribute(_T("ServerIp"));
  if (vrSrvIp.vt != VT_NULL)
  {
   vrSrvIp.ChangeType(VT_BSTR);
   strValue = vrSrvIp.bstrVal;
  }
  
  _variant_t vrSrvPort = pNode->getAttribute(_T("ServerPort"));
  if (vrSrvPort.vt != VT_NULL)
  {
   vrSrvPort.ChangeType(VT_BSTR);
   strValue = vrSrvPort.bstrVal;
  }
  IXMLDOMNodeListPtr pPersonNodes = pNode->selectNodes("/config/person");
  long size = pPersonNodes->length;
  for (int i = 0; i < size; i++)
  {
   IXMLDOMNodePtr pPersonNode = pPersonNodes->item[i];
   
   IXMLDOMNodePtr pNameNode = pPersonNode->selectSingleNode(_T("name"));
   IXMLDOMNodePtr pText = pNameNode->GetfirstChild();
   _variant_t vrPerson = pText->GetnodeValue();
   pNameNode = pPersonNode->selectSingleNode(_T("age"));
   pText = pNameNode->GetfirstChild();
   _variant_t vrAge = pText->GetnodeValue();
   
  }
 }
 catch(_com_error e)
 {
  e.Description();
 }
阅读(993) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~