XML配置文件读写 C++

来源:互联网 发布:网站中seo的标准 编辑:程序博客网 时间:2024/05/18 00:44
使用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();  

0 0