VC读取XML简单例子

VC读取XML简单例子

XML最近被吹的神乎其神,很多数据的交换,包括很多中间件系统,WebService,软件的配置文件,都是在用XML这个技术,的确是个好东西,我手痒,写了个读取XML的代码片段,用的是MSXML的一些接口。

我读的是BT软件的配置文件,XML内容如下:

<?xml version="1.0"?>

<BitComet Author="RnySmile" Version="0.1">

           <Settings>

                      <LastSaveLocation>E:/电子书</LastSaveLocation>

                      <ListenPort>8497</ListenPort>

                      <GlobalMaxUploadRate>3072</GlobalMaxUploadRate>

                      <LastAdCacheClearDate>13104</LastAdCacheClearDate>

                      <LastTrackerKey>16547</LastTrackerKey>

                      <TotalUpload>303008</TotalUpload>

                      <TotalDownload>1180107</TotalDownload>

                      <LastExitTime>1132203124</LastExitTime>

           </Settings>

</BitComet>

代码如下:

#include "stdafx.h"

#include <iostream>

using namespace std;

#include <msxml.h>

#include <atlstr.h>

#import "msxml.dll" raw_interfaces_only

int _tmain(int argc, _TCHAR* argv[])

{

     ::CoInitialize(NULL);

     CComPtr<MSXML::IXMLDOMDocument> spDoc;

     HRESULT hr = spDoc.CoCreateInstance(__uuidof(MSXML::DOMDocument));   //创建文档对象

     VARIANT_BOOL bFlag;

     hr = spDoc->load(CComVariant(L"BitComet.xml"), &bFlag);                //load xml文件

     CComPtr<MSXML::IXMLDOMElement> spElement;

     hr = spDoc->get_documentElement(&spElement);  //获取根结点

     CComBSTR strTagName;

     hr = spElement->get_tagName(&strTagName);

     cout << "------TagName------" << endl;

     cout << CString(strTagName) << endl;

     CComPtr<MSXML::IXMLDOMNodeList> spNodeList;

     hr = spElement->get_childNodes(&spNodeList);  //获取子结点列表

     long lCount;                                           

     hr = spNodeList->get_length(&lCount);

     for (long i=0; i<lCount; ++i)

     {

          CComVariant varNodeValue;

          CComPtr<MSXML::IXMLDOMNode> spNode;

          MSXML::DOMNodeType NodeType;

          CComPtr<MSXML::IXMLDOMNodeList> spChildNodeList;

          hr = spNodeList->get_item(i, &spNode);        //获取结点

          hr = spNode->get_nodeType(&NodeType);         //获取结点信息的类型

          if (NODE_ELEMENT == NodeType)

          {

               hr = spNode->get_childNodes(&spChildNodeList);

               long childLen;

               hr = spChildNodeList->get_length(&childLen);

               cout << "------NodeList------" << endl;

               for (int j=0; j<childLen; ++j)

               {

                    CComPtr<MSXML::IXMLDOMNode> spChildNode;

                    CComBSTR value;

                    hr = spChildNodeList->get_item(j, &spChildNode);

                    hr = spChildNode->get_nodeName(&value);            //获取结点名字

                    cout << CString(value) << endl;

                    hr = spChildNode->get_text(&value);                //获取结点的值

                    cout << CString(value) << endl << endl;

                    spChildNode.Release();

               }

          }

          spNode.Release();

          spChildNodeList.Release();

     }

     spNodeList.Release();

     spElement.Release();

     spDoc.Release();

     ::CoUninitialize();

     return 0;

}

输出结果如下:

------TagName------

BitComet

------NodeList------

LastSaveLocation

E:/电子书

ListenPort

8497

GlobalMaxUploadRate

3072

LastAdCacheClearDate

13104

LastTrackerKey

16547

TotalUpload

303008

TotalDownload

1180107

LastExitTime

1132203124

这是一个最简单的demo,下次软件的配置信息,可以考虑用XML J  

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值