• C++ 操作XML文件 使用MSXML.DLL


    使用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();
  • 相关阅读:
    忽略大小写的RegularExpressionValidator
    Outlook 2010 “加载项执行错误。调用“Microsoft Exchange 加载项”加载项时,在“IDTExtensibility2”接口回调“OnConnection”期间,Outlook 出现故障”问题
    选择排序——算法系列
    代码杂记32
    数据库系统原理
    C#中的委托与事件
    C#多线程
    冒泡排序——算法系列
    快速排序——算法系列
    递归算法——猴子吃桃
  • 原文地址:https://www.cnblogs.com/xuandi/p/5719295.html
Copyright © 2020-2023  润新知