MFC读写XML文件

【转】MFC读写XML文件

    使用MSXML.DLL读写XML;
  1. 文件顶部加入 
  2. #import "msxml3.dll";
  3. usingnamespace MSXML2; 
  4. //这两句作用是,在程序的文件夹下生成MSXML3.TLH和MSXML3.TLI两个文件;
  5. --------------------------------------------------------- 
  6. 创建一个XML文件; 
  7. ::CoInitialize(NULL); 
  8. MSXML2::IXMLDOMDocumentPtr XMLDOC; 
  9. MSXML2::IXMLDOMElementPtr XMLROOT; 
  10. HRESULT HR = XMLDOC.CreateInstance(_uuidof(MSXML2::DOMDocument30)); 
  11. if(!SUCCEEDED(HR)) 
  12.   MessageBox("faild!!"); 
  13. return; 
  14. XMLROOT = XMLDOC->createElement("ROOT"); 
  15. XMLROOT->setAttribute("ID","12345");  //设置根标签的属性;
  16. XMLDOC->appendChild(XMLROOT); 
  17. CString TMP; 
  18. MSXML2::IXMLDOMElementPtr XMLNODE; 
  19. for(int I=0;I<10;I++) 
  20.   TMP.Format("%d",I); 
  21.   XMLNODE = XMLDOC->createElement((_bstr_t)("NODE"+TMP)); 
  22.   XMLNODE->put_text((_bstr_t)"NODETEXTS");//设置标签的文本内容;
  23.   XMLNODE->setAttribute("ID",(_variant_t)TMP);//设置标签的属性及内容;
  24.   XMLNODE->setAttribute("NAME","NODENAME"); 
  25.   XMLROOT->appendChild(XMLNODE); 
  26. XMLDOC->save("XMLTEST.XML"); 
  27. XMLNODE.Release(); 
  28. XMLROOT.Release(); 
  29. XMLDOC.Release(); 
  30. ::CoUninitialize(); 
  31. ------------------------------------------------------------------ 
  32. 读取一个XML; 
  33. ::CoInitialize(NULL); 
  34. MSXML2::IXMLDOMDocumentPtr XMLDOC;  
  35. MSXML2::IXMLDOMElementPtr XMLROOT; 
  36. MSXML2::IXMLDOMElementPtr XMLELEMENT; 
  37. MSXML2::IXMLDOMNodeListPtr XMLNODES; //某个节点的所以字节点
  38. MSXML2::IXMLDOMNamedNodeMapPtr XMLNODEATTS;//某个节点的所有属性;
  39. MSXML2::IXMLDOMNodePtr XMLNODE; 
  40. HRESULT HR = XMLDOC.CreateInstance(_uuidof(MSXML2::DOMDocument30)); 
  41. if(!SUCCEEDED(HR)) 
  42.   MessageBox("faild!!"); 
  43. return; 
  44. XMLDOC->load("XMLTEST.XML"); 
  45. XMLROOT = XMLDOC->GetdocumentElement();//获得根节点;
  46. XMLROOT->get_childNodes(&XMLNODES);//获得根节点的所有子节点;
  47. long XMLNODESNUM,ATTSNUM; 
  48. XMLNODES->get_length(&XMLNODESNUM);//获得所有子节点的个数;
  49. CString TMP; 
  50. TMP.Format("%d",XMLNODESNUM); 
  51. MessageBox(TMP); 
  52. for(int I=0;I<XMLNODESNUM;I++) 
  53.   XMLNODES->get_item(I,&XMLNODE);//获得某个子节点;
  54.   XMLNODE->get_attributes(&XMLNODEATTS);//获得某个节点的所有属性;
  55.   XMLNODEATTS->get_length(&ATTSNUM);//获得所有属性的个数;
  56. for(int J=0;J<ATTSNUM;J++) 
  57.   { 
  58.    XMLNODEATTS->get_item(J,&XMLNODE);//获得某个属性;
  59.    CString T1 = (char*)(_bstr_t)XMLNODE->nodeName; 
  60.    CString T2 = (char*)(_bstr_t)XMLNODE->text; 
  61.    MessageBox(T1+" = "+T2); 
  62.   } 
  63. //MessageBox((_bstr_t)XMLNODE->nodeName+": "+(_bstr_t)XMLNODE->text);
  64. return; 
  65. //XMLDOC->save("XMLTEST.XML");
  66. XMLNODES.Release(); 
  67. XMLNODE.Release(); 
  68. XMLROOT.Release(); 
  69. XMLDOC.Release(); 
  70. ::CoUninitialize(); 
  71. --------------------------------------------------------- 
  72. 总结: 
  73. XML文件档类型:MSXML2::IXMLDOMDocumentPtr; 
  74. 单个元素类型:MSXML2::IXMLDOMElementPtr; 
  75. 单个节点类型:MSXML2::IXMLDOMNodePtr; 
  76. 所有子节点类型:MSXML2::IXMLDOMNodeListPtr; 
  77. 所有属性类型:MSXML2::IXMLDOMNamedNodeMapPtr; 
  78. 获得节点个数的方法:get_length(); 
  79. 获得所有子节点的方法:get_childNodes(); 
  80. 获得指定节点的方法:get_item(索引号,单个节点类型变量); 
  81. 写入单个节点的文本内容方法:put_text((_bstr_t)"内容"); 
  82. 获得单个节点的文本内容属性:XMLNODE->text; 
  83. 获得单个属性的内容属性:XMLNODEATT->text; 
  84. 节点名的属性为:XMLNODE->nodeName; 
  85. --------------------------------------------------------------- 
  86. XML创建文件一般过程: 
  87. ::CoInitialize(NULL); 
  88. HRESULT HR = XMLDOC.CreateInstance(_uuidof(MSXML2::DOMDocument30)); 
  89. if(!SUCCEEDED(HR)) 
  90.   MessageBox("faild!!"); 
  91. return; 
  92. XMLROOT = XMLDOC->createElement("ROOT");//创建文件;
  93. 操作文件..................... 
  94. XMLDOC->save("XMLTEST.XML");//保存文件;
  95. XMLNODE.Release(); 
  96. XMLROOT.Release(); 
  97. XMLDOC.Release(); 
  98. ::CoUninitialize(); 
  99. ------------------------------------------------------------------------------ 
  100. 加载文件过程序: 
  101. ::CoInitialize(NULL); 
  102. HRESULT HR = XMLDOC.CreateInstance(_uuidof(MSXML2::DOMDocument30)); 
  103. if(!SUCCEEDED(HR)) 
  104.   MessageBox("faild!!"); 
  105. return; 
  106. XMLDOC->load("XMLTEST.XML"); 
  107. 文件操作......................... 
  108. XMLDOC->save("XMLTEST.XML");//可以保存对文件的修改;
  109. XMLNODES.Release(); 
  110. XMLNODE.Release(); 
  111. XMLROOT.Release(); 
  112. XMLDOC.Release(); 
  113. ::CoUninitialize(); 

使用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();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值