本文使用微软自家的MSXML解析器,请先自行安装

加入头文件

#import <msxml3.dll> named_guids
using namespace MSXML2;

写入xml

	::CoInitialize(NULL);         //初始化组件  
	 MSXML2::IXMLDOMDocumentPtr XMLDOC;  
	 MSXML2::IXMLDOMElementPtr XMLROOT;   
  
	HRESULT HR = XMLDOC.CreateInstance(_uuidof(MSXML2::DOMDocument30));  
	 if(!SUCCEEDED(HR))  
	 {  
		  MessageBox(_T("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(_T("NODE%d"),I);
		  XMLNODE = XMLDOC->createElement((_bstr_t)(TMP));  
		  XMLNODE->put_text((_bstr_t)"NODETEXTS");//设置标签的文本内容;  
		  XMLNODE->setAttribute("ID",(_variant_t)TMP);//设置标签的属性及内容;  
		  XMLNODE->setAttribute("NAME","NODENAME");  
		  XMLROOT->appendChild(XMLNODE);  
	 }

  
	 XMLDOC->save("XMLTEST.XML");//保存文件;  

	 XMLROOT.Release();  
	 XMLDOC.Release();  
	 ::CoUninitialize(); 
  
保存好的xml内容为


读取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(_T("faild!!"));  
	  return;  
	 }  
	 XMLDOC->load("XMLTEST.XML");  
	 XMLROOT = XMLDOC->GetdocumentElement();//获得根节点;  
	 XMLROOT->get_childNodes(&XMLNODES);//获得根节点的所有子节点;  
	 long XMLNODESNUM,ATTSNUM;  
	 XMLNODES->get_length(&XMLNODESNUM);//获得所有子节点的个数;  
	 CString TMP;  
	 TMP.Format(_T("%d"),XMLNODESNUM);  
	 MessageBox(TMP);  
	 for(int I=0;I<XMLNODESNUM;I++)  
	 {  
		  XMLNODES->get_item(I,&XMLNODE);//获得某个子节点;  
		  XMLNODE->get_attributes(&XMLNODEATTS);//获得某个节点的所有属性; 
		  CString temp2 = XMLNODE->Gettext();      //读取节点内容,注意与读取节点属性的顺序,
		  MessageBox(temp2+_T("*********"));
		  XMLNODEATTS->get_length(&ATTSNUM);//获得所有属性的个数;  
		  for(int J=0;J<ATTSNUM;J++)  
		  {  
			   XMLNODEATTS->get_item(J,&XMLNODE);//获得某个属性;  
			   CString T1 = (_bstr_t)XMLNODE->nodeName;  
			   CString T2 = (_bstr_t)XMLNODE->text;  
			   MessageBox(T1+_T(" = ")+T2);  
		  }  
		  //MessageBox((_bstr_t)XMLNODE->nodeName+": "+(_bstr_t)XMLNODE->text);  
		  CString temp3 = XMLNODE->Gettext();       //虽然此处与上面读取节点内容的代码一致,但是读取的却是节点属性的最后一个值,不知道是什么原因,求大神赐教
		  MessageBox(temp3+_T("++++++"));
	 }    
	 XMLNODES.Release();  
	 XMLNODE.Release();  
	 XMLROOT.Release();  
	 XMLDOC.Release();  
	 ::CoUninitialize();