标题:如何读写,解析xml格式的文件。
只看楼主
liqi2009
Rank: 2
等 级:禁止访问
帖 子:71
专家分:15
注 册:2012-2-21
结帖率:57.89%
已结贴  问题点数:6 回复次数:2 
如何读写,解析xml格式的文件。
如何用MFC读写,解析XML格式的文件?请大家帮个忙推荐一下。谢谢!
搜索更多相关主题的帖子: xml 如何 
2012-02-24 14:20
mayuebo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:257
专家分:1282
注 册:2005-9-8
得分:6 
使用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();

转自博客园 http://

成功贵在坚持
2012-02-28 08:12
ILoveBeckham
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-3-5
得分:0 
推荐一个开源的库,tinyxml,很好使用的。
2012-03-05 13:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-361541-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.188735 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved