MFC读XML文件

  1. 文章转自:http://xuchang163email.blog.163.com/blog/static/75963966200810723431234/
  2. XML文件为:
    1. <?xml version="1.0"?>  
    2.   
    3. <BitComet Author="RnySmile" Version="0.1">  
    4.   
    5.        <Settings>  
    6.   
    7.               <LastSaveLocation>E:\电子书</LastSaveLocation>  
    8.   
    9.               <ListenPort>8497</ListenPort>  
    10.   
    11.               <GlobalMaxUploadRate>3072</GlobalMaxUploadRate>  
    12.   
    13.               <LastAdCacheClearDate>13104</LastAdCacheClearDate>  
    14.   
    15.               <LastTrackerKey>16547</LastTrackerKey>  
    16.   
    17.               <TotalUpload>303008</TotalUpload>  
    18.   
    19.               <TotalDownload>1180107</TotalDownload>  
    20.   
    21.               <LastExitTime>1132203124</LastExitTime>  
    22.   
    23.        </Settings>  
    24.   
    25. </BitComet>  
  3. 代码为:
  4. #include "stdafx.h"    
  5.   
  6. #include <iostream>    
  7.   
  8. using namespace std;   
  9.   
  10. #include <msxml.h>    
  11.   
  12. #include <atlstr.h>    
  13.   
  14. #import "msxml.dll" raw_interfaces_only    
  15.   
  16. int _tmain(int argc, _TCHAR* argv[])    
  17.   
  18. {    
  19.   
  20.      ::CoInitialize(NULL);    
  21.   
  22.      CComPtr<MSXML::IXMLDOMDocument> spDoc;    
  23.   
  24.      HRESULT hr = spDoc.CoCreateInstance(__uuidof(MSXML::DOMDocument));    //创建文档对象   
  25.   
  26.      VARIANT_BOOL bFlag;   
  27.   
  28.      hr = spDoc->load(CComVariant(L"BitComet.xml"), &bFlag);               //load xml文件    
  29.   
  30.      CComPtr<MSXML::IXMLDOMElement> spElement;  
  31.   
  32.      hr = spDoc->get_documentElement(&spElement);   //获取根结点    
  33.   
  34.      CComBSTR strTagName;    
  35.   
  36.      hr = spElement->get_tagName(&strTagName);    
  37.   
  38.      cout << "------TagName------" << endl;    
  39.   
  40.      cout << CString(strTagName) << endl;    
  41.   
  42.      CComPtr<MSXML::IXMLDOMNodeList> spNodeList;    
  43.   
  44.      hr = spElement->get_childNodes(&spNodeList);   //获取子结点列表    
  45.   
  46.      long lCount;                                  
  47.   
  48.      hr = spNodeList->get_length(&lCount);    
  49.   
  50.      for (long i=0; i<lCount; ++i)    
  51.   
  52.      {    
  53.   
  54.          CComVariant varNodeValue;    
  55.   
  56.          CComPtr<MSXML::IXMLDOMNode> spNode;   
  57.   
  58.          MSXML::DOMNodeType NodeType;    
  59.   
  60.          CComPtr<MSXML::IXMLDOMNodeList> spChildNodeList;    
  61.   
  62.          hr = spNodeList->get_item(i, &spNode);         //获取结点    
  63.   
  64.          hr = spNode->get_nodeType(&NodeType);     //获取结点信息的类型    
  65.   
  66.          if (NODE_ELEMENT == NodeType)    
  67.   
  68.          {    
  69.   
  70.               hr = spNode->get_childNodes(&spChildNodeList);    
  71.   
  72.               long childLen;    
  73.   
  74.               hr = spChildNodeList->get_length(&childLen);    
  75.   
  76.               cout << "------NodeList------" << endl;    
  77.   
  78.               for (int j=0; j<childLen; ++j)    
  79.   
  80.               {    
  81.   
  82.                    CComPtr<MSXML::IXMLDOMNode> spChildNode;    
  83.   
  84.                    CComBSTR value;    
  85.   
  86.                    hr = spChildNodeList->get_item(j, &spChildNode);   
  87.   
  88.                    hr = spChildNode->get_nodeName(&value);            //获取结点名字   
  89.   
  90.                    cout << CString(value) << endl;    
  91.   
  92.                    hr = spChildNode->get_text(&value);                //获取结点的值   
  93.   
  94.                    cout << CString(value) << endl << endl;            
  95.   
  96.                    spChildNode.Release();    
  97.   
  98.               }    
  99.   
  100.          }    
  101.   
  102.          spNode.Release();    
  103.   
  104.          spChildNodeList.Release();    
  105.   
  106.      }    
  107.   
  108.      spNodeList.Release();    
  109.   
  110.      spElement.Release();    
  111.   
  112.      spDoc.Release();    
  113.   
  114.      ::CoUninitialize();    
  115.   
  116.      return 0;    
  117.   
  118. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值