本文轉自:http://blog.csdn.net/nanhaizhixin/article/details/6797968
使用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();