mfc 使用MSXML.DLL讀寫XML

  1. 使用MSXML.DLL讀寫XML;  
  2.   
  3. 文件頂部加入  
  4.   
  5. #import "msxml3.dll";  
  6.   
  7. using namespace MSXML2;  
  8.   
  9. //這兩句作用是,在程序的文件夾下生成MSXML3.TLH和MSXML3.TLI兩個文件;  
  10.   
  11. ---------------------------------------------------------  
  12.   
  13. 創建一個XML文件;  
  14.   
  15.  ::CoInitialize(NULL);  
  16.  MSXML2::IXMLDOMDocumentPtr XMLDOC;  
  17.  MSXML2::IXMLDOMElementPtr XMLROOT;  
  18.   
  19.  HRESULT HR = XMLDOC.CreateInstance(_uuidof(MSXML2::DOMDocument30));  
  20.  if(!SUCCEEDED(HR))  
  21.  {  
  22.   MessageBox("faild!!");  
  23.   return;  
  24.  }  
  25.  XMLROOT = XMLDOC->createElement("ROOT");  
  26.  XMLROOT->setAttribute("ID","12345");  //設置根標籤的屬性;  
  27.  XMLDOC->appendChild(XMLROOT);  
  28.  CString TMP;  
  29.  MSXML2::IXMLDOMElementPtr XMLNODE;  
  30.  for(int I=0;I<10;I++)  
  31.  {  
  32.   TMP.Format("%d",I);  
  33.   XMLNODE = XMLDOC->createElement((_bstr_t)("NODE"+TMP));  
  34.   XMLNODE->put_text((_bstr_t)"NODETEXTS");//設置標籤的文本內容;  
  35.   XMLNODE->setAttribute("ID",(_variant_t)TMP);//設置標籤的屬性及內容;  
  36.   XMLNODE->setAttribute("NAME","NODENAME");  
  37.   XMLROOT->appendChild(XMLNODE);  
  38.  }  
  39.  XMLDOC->save("XMLTEST.XML");  
  40.  XMLNODE.Release();  
  41.  XMLROOT.Release();  
  42.  XMLDOC.Release();  
  43.  ::CoUninitialize();  
  44.   
  45. ------------------------------------------------------------------  
  46.   
  47. 讀取一個XML;  
  48.   
  49.  ::CoInitialize(NULL);  
  50.  MSXML2::IXMLDOMDocumentPtr XMLDOC;   
  51.  MSXML2::IXMLDOMElementPtr XMLROOT;  
  52.  MSXML2::IXMLDOMElementPtr XMLELEMENT;  
  53.  MSXML2::IXMLDOMNodeListPtr XMLNODES; //某個節點的所以字節點  
  54.  MSXML2::IXMLDOMNamedNodeMapPtr XMLNODEATTS;//某個節點的所有屬性;  
  55.  MSXML2::IXMLDOMNodePtr XMLNODE;  
  56.  HRESULT HR = XMLDOC.CreateInstance(_uuidof(MSXML2::DOMDocument30));  
  57.  if(!SUCCEEDED(HR))  
  58.  {  
  59.   MessageBox("faild!!");  
  60.   return;  
  61.  }  
  62.  XMLDOC->load("XMLTEST.XML");  
  63.  XMLROOT = XMLDOC->GetdocumentElement();//獲得根節點;  
  64.  XMLROOT->get_childNodes(&XMLNODES);//獲得根節點的所有子節點;  
  65.  long XMLNODESNUM,ATTSNUM;  
  66.  XMLNODES->get_length(&XMLNODESNUM);//獲得所有子節點的個數;  
  67.  CString TMP;  
  68.  TMP.Format("%d",XMLNODESNUM);  
  69.  MessageBox(TMP);  
  70.  for(int I=0;I<XMLNODESNUM;I++)  
  71.  {  
  72.   XMLNODES->get_item(I,&XMLNODE);//獲得某個子節點;  
  73.   XMLNODE->get_attributes(&XMLNODEATTS);//獲得某個節點的所有屬性;  
  74.   XMLNODEATTS->get_length(&ATTSNUM);//獲得所有屬性的個數;  
  75.   for(int J=0;J<ATTSNUM;J++)  
  76.   {  
  77.    XMLNODEATTS->get_item(J,&XMLNODE);//獲得某個屬性;  
  78.    CString T1 = (char*)(_bstr_t)XMLNODE->nodeName;  
  79.    CString T2 = (char*)(_bstr_t)XMLNODE->text;  
  80.    MessageBox(T1+" = "+T2);  
  81.   }  
  82.   //MessageBox((_bstr_t)XMLNODE->nodeName+": "+(_bstr_t)XMLNODE->text);  
  83.  }  
  84.  return;  
  85.  //XMLDOC->save("XMLTEST.XML");  
  86.  XMLNODES.Release();  
  87.  XMLNODE.Release();  
  88.  XMLROOT.Release();  
  89.  XMLDOC.Release();  
  90.  ::CoUninitialize();  
  91.   
  92. ---------------------------------------------------------  
  93.   
  94. 總結:  
  95.   
  96. XML文件檔類型:MSXML2::IXMLDOMDocumentPtr;  
  97.   
  98. 單個元素類型:MSXML2::IXMLDOMElementPtr;  
  99.   
  100. 單個節點類型:MSXML2::IXMLDOMNodePtr;  
  101.   
  102. 所有子節點類型:MSXML2::IXMLDOMNodeListPtr;  
  103.   
  104. 所有屬性類型:MSXML2::IXMLDOMNamedNodeMapPtr;  
  105.   
  106. 獲得節點個數的方法:get_length();  
  107.   
  108. 獲得所有子節點的方法:get_childNodes();  
  109.   
  110. 獲得指定節點的方法:get_item(索引號,單個節點類型變量);  
  111.   
  112. 寫入單個節點的文本內容方法:put_text((_bstr_t)"內容");  
  113.   
  114. 獲得單個節點的文本內容屬性:XMLNODE->text;  
  115.   
  116. 獲得單個屬性的內容屬性:XMLNODEATT->text;  
  117.   
  118. 節點名的屬性爲:XMLNODE->nodeName;  
  119.   
  120. ---------------------------------------------------------------  
  121.   
  122. XML創建文件一般過程:  
  123.   
  124.  ::CoInitialize(NULL);  
  125.   
  126. HRESULT HR = XMLDOC.CreateInstance(_uuidof(MSXML2::DOMDocument30));  
  127.  if(!SUCCEEDED(HR))  
  128.  {  
  129.   MessageBox("faild!!");  
  130.   return;  
  131.  }  
  132.  XMLROOT = XMLDOC->createElement("ROOT");//創建文件;  
  133.   
  134. 操作文件.....................  
  135.   
  136.  XMLDOC->save("XMLTEST.XML");//保存文件;  
  137.  XMLNODE.Release();  
  138.  XMLROOT.Release();  
  139.  XMLDOC.Release();  
  140.  ::CoUninitialize();  
  141.   
  142. ------------------------------------------------------------------------------  
  143.   
  144. 加載文件過程序:  
  145.   
  146.  ::CoInitialize(NULL);  
  147.  HRESULT HR = XMLDOC.CreateInstance(_uuidof(MSXML2::DOMDocument30));  
  148.  if(!SUCCEEDED(HR))  
  149.  {  
  150.   MessageBox("faild!!");  
  151.   return;  
  152.  }  
  153.  XMLDOC->load("XMLTEST.XML");  
  154.   
  155. 文件操作.........................  
  156.   
  157.  XMLDOC->save("XMLTEST.XML");//可以保存對文件的修改;  
  158.  XMLNODES.Release();  
  159.  XMLNODE.Release();  
  160.  XMLROOT.Release();  
  161.  XMLDOC.Release();  
  162.  ::CoUninitialize();  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章