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