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. }  
### 回答1: MFC是微软基于Windows操作系统开发的一套应用程序框架,用于简化Windows GUI应用程序的开发过程,其中包括控件、界面设计、消息传递等功能。而TinyXML是一个轻量级的XML解析库,用于解析和处理XML文件MFC和TinyXML可以互相结合使用,以便更方便地处理XML文件。在MFC中使用TinyXML,我们需要包含TinyXML的头文件和库文件,并将其集成到MFC项目中。然后,我们可以使用TinyXML提供的API来解析XML文件、查找XML节点、读取和修改XML节点的属性和文本内容,以及创建新的XML节点等操作。 通过结合MFC和TinyXML,我们可以在MFC应用程序中轻松地读取和解析XML配置文件,例如读取和设置应用程序的一些设置项、存储和加载用户的数据等。同时,我们也可以使用TinyXML来生成、修改和保存XML文件,例如将应用程序的数据导出为XML文件、从XML文件中加载数据等。 总之,MFC和TinyXML的结合可以使MFC应用程序更加灵活和便捷地处理XML文件。无论是读取、解析还是生成和编辑XML文件MFC和TinyXML都提供了简单易用的接口,帮助开发者在Windows平台上进行XML文件的处理。 ### 回答2: MFC(Microsoft Foundation Class)是微软公司开发的一套C++类库,用于在Windows操作系统上开发图形用户界面应用程序。它提供了一系列的封装类,简化了Windows编程的复杂性,使开发者能够更加方便地创建窗口、控件以及处理用户交互等操作。 TinyXML是一个轻量级的C++ XML解析器,它能够在内存中解析XML文件,并提供了便利的接口来访问和操作XML文档的内容。TinyXML可以很好地与MFC集成使用,可以方便地将XML文档的数据存储到MFC程序中的数据结构中,或将MFC程序中的数据保存为XML文件MFC的封装类提供了与文件操作相关的功能,而TinyXML提供了解析和操作XML文件的能力。在MFC程序中使用TinyXML,可以通过调用其提供的接口,实现读取、写入和修改XML文件的功能。例如,可以使用TinyXMLMFC程序中的数据存储为XML文档,然后在需要时将其读取回来进行处理;或者可以读取外部的XML文件,并将其内容解析并存储到MFC程序中的数据结构中,以供程序进一步使用。 MFC和TinyXML的结合可以为MFC程序添加XML处理的能力,方便地读取和存储配置文件、数据文件等内容。同时,由于TinyXML的轻量级特性,它对内存的占用较小,解析效率也较高,使得MFC程序在处理XML文件时能够更加高效和灵活。总而言之,MFC和TinyXML的结合为开发人员提供了一种简便而有效的方式来处理XML数据。 ### 回答3: MFC TinyXML是一个用于处理XML文件的小型C++库。它基于MFC框架,提供了简洁的API和易于使用的接口,使开发人员可以轻松地读取、写入和操作XML文档。 MFC TinyXML使用DOM(文档对象模型)的方式来解析XML文件。它可以将XML文档加载到内存中并创建一个层次结构的节点树,开发者可以通过遍历树状结构来访问和修改XML文件的内容。MFC TinyXML还支持XPath,这是一种通过路径来定位和选择XML节点的语言。开发人员可以使用XPath表达式来准确定位所需的节点,从而更加灵活地处理XML文档。 除了基本的写功能,MFC TinyXML还提供了一些特性,如错误处理和UTF-8编码的支持。错误处理功能可以帮助开发人员在XML解析过程中捕获和处理错误,确保程序的稳定性。而UTF-8编码的支持则使得MFC TinyXML可以正确地处理不同语言和字符集的XML文件。 总之,MFC TinyXML是一个轻量级、方便易用的XML处理库,特别适合在MFC框架下开发的应用程序中使用。无论是读取配置文件、解析数据、还是生成XML报告,MFC TinyXML都可以帮助开发人员快速、高效地完成相关任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值