XML配置文件读写 C++

使用MSXML.DLL读写XML;  
  
文件顶部加入  
  
#import "msxml3.dll";  
  
using namespace MSXML2;  
  
//这两句作用是,在程序的文件夹下生成MSXML3.TLH和MSXML3.TLI两个文件;  
  
---------------------------------------------------------  
  
创建一个XML文件;  
  
 ::CoInitialize(NULL);  
 MSXML2::IXMLDOMDocumentPtr XMLDOC;  
 MSXML2::IXMLDOMElementPtr XMLROOT;  
  
 HRESULT HR = XMLDOC.CreateInstance(_uuidof(MSXML2::DOMDocument30));  
 if(!SUCCEEDED(HR))  
 {  
  MessageBox("faild!!");  
  return;  
 }  
 XMLROOT = XMLDOC->createElement("ROOT");  
 XMLROOT->setAttribute("ID","12345");  //设置根标签的属性;  
 XMLDOC->appendChild(XMLROOT);  
 CString TMP;  
 MSXML2::IXMLDOMElementPtr XMLNODE;  
 for(int I=0;I<10;I++)  
 {  
  TMP.Format("%d",I);  
  XMLNODE = XMLDOC->createElement((_bstr_t)("NODE"+TMP));  
  XMLNODE->put_text((_bstr_t)"NODETEXTS");//设置标签的文本内容;  
  XMLNODE->setAttribute("ID",(_variant_t)TMP);//设置标签的属性及内容;  
  XMLNODE->setAttribute("NAME","NODENAME");  
  XMLROOT->appendChild(XMLNODE);  
 }  
 XMLDOC->save("XMLTEST.XML");  
 XMLNODE.Release();  
 XMLROOT.Release();  
 XMLDOC.Release();  
 ::CoUninitialize();  
  
------------------------------------------------------------------  
  
读取一个XML;  
  
 ::CoInitialize(NULL);  
 MSXML2::IXMLDOMDocumentPtr XMLDOC;   
 MSXML2::IXMLDOMElementPtr XMLROOT;  
 MSXML2::IXMLDOMElementPtr XMLELEMENT;  
 MSXML2::IXMLDOMNodeListPtr XMLNODES; //某个节点的所以字节点  
 MSXML2::IXMLDOMNamedNodeMapPtr XMLNODEATTS;//某个节点的所有属性;  
 MSXML2::IXMLDOMNodePtr XMLNODE;  
 HRESULT HR = XMLDOC.CreateInstance(_uuidof(MSXML2::DOMDocument30));  
 if(!SUCCEEDED(HR))  
 {  
  MessageBox("faild!!");  
  return;  
 }  
 XMLDOC->load("XMLTEST.XML");  
 XMLROOT = XMLDOC->GetdocumentElement();//获得根节点;  
 XMLROOT->get_childNodes(&XMLNODES);//获得根节点的所有子节点;  
 long XMLNODESNUM,ATTSNUM;  
 XMLNODES->get_length(&XMLNODESNUM);//获得所有子节点的个数;  
 CString TMP;  
 TMP.Format("%d",XMLNODESNUM);  
 MessageBox(TMP);  
 for(int I=0;I<XMLNODESNUM;I++)  
 {  
  XMLNODES->get_item(I,&XMLNODE);//获得某个子节点;  
  XMLNODE->get_attributes(&XMLNODEATTS);//获得某个节点的所有属性;  
  XMLNODEATTS->get_length(&ATTSNUM);//获得所有属性的个数;  
  for(int J=0;J<ATTSNUM;J++)  
  {  
   XMLNODEATTS->get_item(J,&XMLNODE);//获得某个属性;  
   CString T1 = (char*)(_bstr_t)XMLNODE->nodeName;  
   CString T2 = (char*)(_bstr_t)XMLNODE->text;  
   MessageBox(T1+" = "+T2);  
  }  
  //MessageBox((_bstr_t)XMLNODE->nodeName+": "+(_bstr_t)XMLNODE->text);  
 }  
 return;  
 //XMLDOC->save("XMLTEST.XML");  
 XMLNODES.Release();  
 XMLNODE.Release();  
 XMLROOT.Release();  
 XMLDOC.Release();  
 ::CoUninitialize();  
  
---------------------------------------------------------  
  
总结:  
  
XML文件档类型:MSXML2::IXMLDOMDocumentPtr;  
  
单个元素类型:MSXML2::IXMLDOMElementPtr;  
  
单个节点类型:MSXML2::IXMLDOMNodePtr;  
  
所有子节点类型:MSXML2::IXMLDOMNodeListPtr;  
  
所有属性类型:MSXML2::IXMLDOMNamedNodeMapPtr;  
  
获得节点个数的方法:get_length();  
  
获得所有子节点的方法:get_childNodes();  
  
获得指定节点的方法:get_item(索引号,单个节点类型变量);  
  
写入单个节点的文本内容方法:put_text((_bstr_t)"内容");  
  
获得单个节点的文本内容属性:XMLNODE->text;  
  
获得单个属性的内容属性:XMLNODEATT->text;  
  
节点名的属性为:XMLNODE->nodeName;  
  
---------------------------------------------------------------  
  
XML创建文件一般过程:  
  
 ::CoInitialize(NULL);  
  
HRESULT HR = XMLDOC.CreateInstance(_uuidof(MSXML2::DOMDocument30));  
 if(!SUCCEEDED(HR))  
 {  
  MessageBox("faild!!");  
  return;  
 }  
 XMLROOT = XMLDOC->createElement("ROOT");//创建文件;  
  
操作文件.....................  
  
 XMLDOC->save("XMLTEST.XML");//保存文件;  
 XMLNODE.Release();  
 XMLROOT.Release();  
 XMLDOC.Release();  
 ::CoUninitialize();  
  
------------------------------------------------------------------------------  
  
加载文件过程序:  
  
 ::CoInitialize(NULL);  
 HRESULT HR = XMLDOC.CreateInstance(_uuidof(MSXML2::DOMDocument30));  
 if(!SUCCEEDED(HR))  
 {  
  MessageBox("faild!!");  
  return;  
 }  
 XMLDOC->load("XMLTEST.XML");  
  
文件操作.........................  
  
 XMLDOC->save("XMLTEST.XML");//可以保存对文件的修改;  
 XMLNODES.Release();  
 XMLNODE.Release();  
 XMLROOT.Release();  
 XMLDOC.Release();  
 ::CoUninitialize();  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值