C++ 操作XML文件 使用MSXML.DLL


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM