- 使用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();
mfc 使用MSXML.DLL讀寫XML
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.