• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            如何在VC環(huán)境下編寫程序讀取XML文件?

            #import <msxml3.dll> named_guids  //導入動態(tài)庫,裝了IE5就有
            using namespace MSXML2;     //引用命名空間,一般可以把命名空間理解成類和接口的集合,呵呵,對不對我也不知道了
            #include <vector>
            using namespace std;
            struct FIELD
            {
            public:
             CString  name;
             CString  type;
             CString  length;
             CString  explain;
             CString  allowNull;
             CString  autoIncrease;
            };
            class Xml
            {
            public:
             Xml(void);
             ~Xml(void);
            private:
             HRESULT hr;
             MSXML2::IXMLDOMDocumentPtr pDoc; //XML文檔接口指針
            public:
             void AddKey(CString moduleName,CString keyName, CString keyValue);
             CString ReadKeyValue(CString moduleName, CString keyName);
            private:
             void NewDocument(CString moduleName, CString keyName, CString keyValue);
            public:
             bool ReadTable(CTreeCtrl * tree);
             bool ReadFields(CString tableName,vector<FIELD> &fields);
             bool SaveTable(vector<FIELD> fields,CString tableName,bool bNew);
            };

            //-------------------------------------------------------------------------------------------------------------------------------------

            上面是頭文件,這是cpp文件

            #include "StdAfx.h"
            #include "xml.h"

            Xml::Xml(void)
            {

             CoInitialize(NULL);                       //初始化COM
             hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMDocument,(void**)&pDoc); //創(chuàng)建XML文檔實例
            }

            Xml::~Xml(void)
            {
             CoUninitialize();
            }

            void Xml::AddKey(CString moduleName,CString keyName, CString keyValue)
            {
             CString selectString="AppSetting/"+moduleName;                //XML節(jié)點定位字符串,定位到節(jié)點名為moduleName的二級節(jié)點,根節(jié)點取默認名為"AppSetting"
             hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMDocument,(void**)&pDoc); //創(chuàng)建文檔實例
             CFileFind finder;                       //查找文件是否存在的MFC類
             if(!finder.FindFile("Config.xml"))                   //查找文件是否存在,不存在則調(diào)用函數(shù)生成一個新的XML文件
             {
              NewDocument(moduleName,keyName,keyValue);
              return;
             }
             pDoc->load("Config.xml");                     //從應用程序目錄中加載XML文件
             MSXML2::IXMLDOMNodePtr moduleNode;                   //XML節(jié)點接口指針
             MSXML2::IXMLDOMNodePtr keyNode;                    //同上
             MSXML2::IXMLDOMNodePtr selectNode;                   //同上
             hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMNode,(void**)&moduleNode); //創(chuàng)建節(jié)點實例
             hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMNode,(void**)&keyNode); //同上
             hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMNode,(void**)&selectNode); //同上
             moduleNode=pDoc->selectSingleNode((_bstr_t)selectString);             //定位到節(jié)點名為moduleName的二級節(jié)點
             if(moduleNode==NULL)                      //如果無法定位,說明還不存在此節(jié)點,生成一個新的節(jié)點
             {
              selectNode=pDoc->selectSingleNode("AppSetting");              //定位到根節(jié)點,這里一定能定位成功,除非手動改了XML文件
              moduleNode=pDoc->createNode(1,(_bstr_t)moduleName,"");             //生成新節(jié)點
                    selectNode->appendChild(moduleNode);                 //將新節(jié)點添加到根節(jié)點
             }
             selectString+="/"+keyName;                     //XML節(jié)點定位字符串,定位到節(jié)點名為keyName的三級節(jié)點
             keyNode=pDoc->selectSingleNode((_bstr_t)selectString);              //定位到節(jié)點名為keyName的三級節(jié)點
             if(keyNode==NULL)                       //如果無法定位,說明還不存在此節(jié)點,生成一個新的節(jié)點
             {
              keyNode=pDoc->createNode(1,(_bstr_t)keyName,"");              //生成新節(jié)點
              moduleNode->appendChild(keyNode);                  //將新節(jié)點添加到節(jié)點名moduleName的節(jié)點
             }
             keyNode->text=(_bstr_t)keyValue;                   //給節(jié)點名為keyName的節(jié)點賦text值秋keyValue
             pDoc->save("Config.xml");                     //保存
            }

            CString Xml::ReadKeyValue(CString moduleName, CString keyName)
            {
             CString selectString="AppSetting/"+moduleName+"/"+keyName;
             CString keyValue="";
             hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMDocument,(void**)&pDoc); //創(chuàng)建文檔實例
             CFileFind finder;                       //查找文件是否存在的MFC類
             if(!finder.FindFile("Config.xml"))                   //查找文件是否存在,不存在則調(diào)用函數(shù)生成一個新的XML文件
             {
              return "";
             }
             pDoc->load("Config.xml");
             MSXML2::IXMLDOMNodePtr selectNode;                   //同上
             hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMNode,(void**)&selectNode); //創(chuàng)建節(jié)點實例
             selectNode=pDoc->selectSingleNode((_bstr_t)selectString);
             if(selectNode==NULL)
             {
              return "";
             }
             else
             {
              return (CString)((BSTR)selectNode->text);
             }
            }

            void Xml::NewDocument(CString moduleName, CString keyName, CString keyValue)
            {
             CString strXml="<AppSetting><"+moduleName+"><"+keyName+">"+keyValue+"</"+keyName+"></"+moduleName+"></AppSetting>"; //XML字符串
             pDoc->loadXML((_bstr_t)strXml);                      //通過加載字符生成XML的Document,此處用方法loadXml,從文件加載用load,參考前面
             pDoc->save("Config.xml");                       //保存
            }


            bool Xml::ReadTable(CTreeCtrl * tree)
            {
             CString selectString="DataResource/Tables/Table";
             hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMDocument,(void**)&pDoc); //創(chuàng)建文檔實例
             CFileFind finder;                       //查找文件是否存在的MFC類
             if(!finder.FindFile("DataResource.xml"))                 //查找文件是否存在,不存在則調(diào)用函數(shù)生成一個新的XML文件
             {
              return false;
             }
             pDoc->load("DataResource.xml");
             MSXML2::IXMLDOMElementPtr node;                     //同上
             hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMElement,(void**)&node);  //創(chuàng)建節(jié)點實例
             MSXML2::IXMLDOMNodeListPtr selectNodes;                    
             hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMNodeList,(void**)&selectNodes);//創(chuàng)建節(jié)點列表實例
             selectNodes=pDoc->selectNodes((_bstr_t)selectString);               //查找節(jié)點集
             
             HTREEITEM tabItem=tree->GetChildItem(tree->GetRootItem());
             if(selectNodes==NULL)
             {
              return false;
             }
             else
             {
              for(long i=0;i<selectNodes->Getlength();i++)
              {
               
               node=selectNodes->Getitem(i);
               _variant_t nodeName=node->getAttribute("Name");
               
               tree->InsertItem((CString)nodeName.bstrVal,3,3,tabItem);
              }
              
              //return (CString)((BSTR)selectNode->text);
             }
             return true;
            }
            bool Xml::ReadFields(CString tableName,vector<FIELD> &fields)
            {
             
             CString selectString="DataResource/Tables/Table";
             hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMDocument,(void**)&pDoc); //創(chuàng)建文檔實例
             CFileFind finder;                       //查找文件是否存在的MFC類
             if(!finder.FindFile("DataResource.xml"))                 //查找文件是否存在,不存在則調(diào)用函數(shù)生成一個新的XML文件
             {
              return false;
             }
             pDoc->load("DataResource.xml");
             MSXML2::IXMLDOMElementPtr node;                     //同上
             hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMElement,(void**)&node);  //創(chuàng)建節(jié)點實例
             MSXML2::IXMLDOMNodeListPtr tableNodes;                    
             hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMNodeList,(void**)&tableNodes);//創(chuàng)建節(jié)點列表實例
             MSXML2::IXMLDOMNodeListPtr fieldNodes;                    
             hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMNodeList,(void**)&fieldNodes);//創(chuàng)建節(jié)點列表實例
             tableNodes=pDoc->selectNodes((_bstr_t)selectString);               //查找節(jié)點集
             
             if(tableNodes==NULL)
             {
              return false;
             }
             for(long i=0;i<tableNodes->Getlength();i++)
             {
              node=tableNodes->Getitem(i);
              CString nodeName=(CString)node->getAttribute("Name");
              if(nodeName==tableName)
              {
               fieldNodes=node->GetchildNodes();
               break;
              }
             }
             if(fieldNodes==NULL)
             {
              return false;
             }
             fields.clear();
             for(long i=0;i<fieldNodes->Getlength();i++)
             {
              FIELD field;
              node=fieldNodes->Getitem(i);
              field.autoIncrease=node->getAttribute("AutoIncrease");
              field.explain=node->getAttribute("Explain");
              field.length=node->getAttribute("Length");
              field.name=node->getAttribute("Name");
              field.type=node->getAttribute("Type");
              field.allowNull=node->getAttribute("AllowNull");
              fields.push_back(field);
              
             }
             return true;
            }
            bool Xml::SaveTable(vector<FIELD> fields,CString tableName,bool bNew)
            {
             
             hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMDocument,(void**)&pDoc);   //創(chuàng)建文檔實例
             CFileFind finder;                         //查找文件是否存在的MFC類
             if(!finder.FindFile("DataResource.xml"))                   //查找文件是否存在,不存在則調(diào)用函數(shù)生成一個新的XML文件
             {
              return false;
             }
             pDoc->load("DataResource.xml");
             CString selectString="";
             selectString="DataResource/Tables";
             MSXML2::IXMLDOMNodePtr tablesNode;
             hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMNode,(void**)&tablesNode);   //創(chuàng)建節(jié)點實例
             MSXML2::IXMLDOMElementPtr tableNode;                    //同上
             hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMElement,(void**)&tableNode);  //創(chuàng)建節(jié)點實例
             tablesNode=pDoc->selectSingleNode((_bstr_t)selectString);               //查找節(jié)點集
             if(bNew)
             {
              tableNode=pDoc->createNode(1,"Table","");
              tableNode->setAttribute("Name",(_bstr_t)tableName);
             }
             else
             {
              MSXML2::IXMLDOMNodeListPtr tableNodeList;                    
              hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMNodeList,(void**)&tableNodeList);  //創(chuàng)建節(jié)點列表實例
              tableNodeList=tablesNode->GetchildNodes();
              CString nodeName="";
              for(int i=0;i<tableNodeList->Getlength();i++)
              {
               tableNode=tableNodeList->Getitem(i);
               nodeName=tableNode->getAttribute("Name");
               if(nodeName.MakeLower()==tableName.MakeLower())
               {
                MSXML2::IXMLDOMElementPtr fieldNode;                   //同上
                hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMElement,(void**)&fieldNode);   //創(chuàng)建節(jié)點實例
                int fieldsCount=tableNode->GetchildNodes()->Getlength();
                for(int j=fieldsCount-1;j>-1;j--)
                {
                 fieldNode=tableNode->GetchildNodes()->Getitem(j);
                 tableNode->removeChild(fieldNode);
                }
                break;
               }
               if(i==tableNodeList->Getlength())
               {
                return false;
               }
              }
             }
             for(int i=0;i<fields.size();i++)
             {
              MSXML2::IXMLDOMElementPtr fieldNode;                   //同上
              hr=CoCreateInstance(MSXML2::CLSID_DOMDocument,NULL,CLSCTX_ALL,MSXML2::IID_IXMLDOMElement,(void**)&fieldNode); //創(chuàng)建節(jié)點實例
              fieldNode=pDoc->createNode(1,"Field","");
              FIELD field=fields[i];
              fieldNode->setAttribute("Name",(_bstr_t)field.name);
              fieldNode->setAttribute((_bstr_t)"AllowNull",(_bstr_t)field.allowNull);
              fieldNode->setAttribute((_bstr_t)"AutoIncrease",(_bstr_t)field.autoIncrease);
              fieldNode->setAttribute((_bstr_t)"Explain",(_bstr_t)field.explain);
              fieldNode->setAttribute((_bstr_t)"Length",(_bstr_t)field.length);
              fieldNode->setAttribute((_bstr_t)"Type",(_bstr_t)field.type);
              tableNode->appendChild(fieldNode);
             }
             if(bNew)
              tablesNode->appendChild(tableNode);
             pDoc->save("DataResource.xml");
             return true;
            }







            //下面是另外的一段代碼
            {
             // TODO: Add your implementation code here
             CComPtr<xml::IXMLDOMDocument> pDoc;

             try
             {
              HRESULT hr = pDoc.CoCreateInstance(L"Msxml2.DOMDocument.4.0");
              if (FAILED(hr)) return hr;

              CComPtr<xml::IXMLDOMElement> pRoot;
              hr = pDoc->get_documentElement(&pRoot);
              if (FAILED(hr)) return hr;

              //create comment
              CComPtr<xml::IXMLDOMComment> pComm;
              hr=pDoc->createComment(CComBSTR(L"Compupacific Entry Template"),&pComm);
              if (FAILED(hr)) return hr;
              hr=pDoc->appendChild(pComm,0);

              //Root of the Doc
              CComPtr<xml::IXMLDOMElement> pElem;
              hr = pDoc->createElement(CComBSTR(L"Template"), &pElem);
              if (FAILED(hr)) return hr;

              hr = pDoc->putref_documentElement(pElem);
              if (FAILED(hr)) return hr;
              
              VARIANT var;
              var.vt=VT_BSTR;
              var.bstrVal=::SysAllocString(m_bstrCaption);
              hr = pElem->setAttribute(CComBSTR(L"Name"), var);
              ::SysFreeString(var.bstrVal);
              if (FAILED(hr)) return hr;
             
              VARIANT var1;
              var1.vt=VT_BSTR;
              var1.bstrVal=::SysAllocString(m_bstrSampleImage);
              hr = pElem->setAttribute(CComBSTR(L"Sample"), var1);
              ::SysFreeString(var1.bstrVal);
              if (FAILED(hr)) return hr;

              VARIANT var2;
              var2.vt=VT_I2;
              var2.iVal=m_shDock;
              hr = pElem->setAttribute(CComBSTR(L"Dock"), var2);
              if (FAILED(hr)) return hr;
             }
             catch(...)
             {
              ::MessageBox(NULL,_T("Error in save form property!"),_T("Error Report"),MB_OK);
              return S_FALSE;
             }
             try
             {
              //Now tell the form to persist its child controls
              CComBSTR Tmp;
              for(std::list<CAxWindowHandle* >::iterator it = m_listSites.begin(); it != m_listSites.end();it++)
              { 
               if(*it)
               {
                CComPtr<xml::IXMLDOMElement> pRoot;
                HRESULT hr = pDoc->get_documentElement(&pRoot);
                if (FAILED(hr)) return hr;
                
                CComPtr<xml::IXMLDOMNode> pNode;
                Tmp=OLESTR("Control");
                CComBSTR Tmp1;
                hr = pDoc->createNode(CComVariant(1),Tmp.m_str, Tmp1.m_str, &pNode);
                if (FAILED(hr)) return hr;
                   
                hr = pRoot->appendChild(pNode.p, 0);
                if (FAILED(hr)) return hr;

                CComPtr<IPersistPropertyBag> spPersistPropBag;
                hr = (*it)->QueryControl(&spPersistPropBag);
                if (FAILED(hr)) return hr;
                
                hr = spPersistPropBag->InitNew();
                if (FAILED(hr)) return hr;

                CComPtr<IPersistPropertyBag> spExtendedPPB;
                if((*it)->m_pExtendedDispatchObj)
                {
                 hr = (*it)->m_pExtendedDispatchObj->QueryInterface(&spExtendedPPB);
                 if (FAILED(hr)) return hr;
                }
                
                CComQIPtr<xml::IXMLDOMElement> pElem(pNode);
                if(!pElem) return E_NOINTERFACE;
                
                //Save Extended Properties
                hr = SaveToXML(pDoc, pElem.p, spExtendedPPB, TRUE, TRUE);
                if (FAILED(hr)) return hr;

                //Save Native Properties
                hr = SaveToXML(pDoc, pElem.p, spPersistPropBag, TRUE, TRUE);
                if (FAILED(hr)) return hr;
               }
              }
               
              return pDoc->save(CComVariant(FileName));    
             }
             catch(...)
             {
              ::MessageBox(NULL,_T("Error in save control property!"),_T("Error Report"),MB_OK);
              return S_FALSE;
             }
            }

            posted on 2010-10-15 13:34 wrh 閱讀(2735) 評論(0)  編輯 收藏 引用

            導航

            <2011年8月>
            31123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            統(tǒng)計

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            国产国产成人精品久久| 成人精品一区二区久久| 久久亚洲国产成人精品性色| 久久青草国产手机看片福利盒子| 久久精品综合一区二区三区| 久久亚洲精品国产精品婷婷| 97超级碰碰碰久久久久| 久久久噜噜噜久久| 久久久久亚洲AV无码专区体验| 久久久久亚洲av成人无码电影| 欧美黑人又粗又大久久久| 人人狠狠综合88综合久久| 国产综合久久久久| 久久婷婷色综合一区二区| 国产精品成人久久久久三级午夜电影 | 国产精品欧美亚洲韩国日本久久| 久久亚洲国产精品五月天婷| 潮喷大喷水系列无码久久精品| 色综合合久久天天给综看| 色噜噜狠狠先锋影音久久| 色诱久久久久综合网ywww| 中文字幕精品久久久久人妻| 久久97久久97精品免视看秋霞| 亚洲午夜久久久影院| 久久久久久国产a免费观看黄色大片 | 女人高潮久久久叫人喷水| 久久国产精品免费一区| 精品久久久久久国产| 精品久久久噜噜噜久久久| 久久亚洲sm情趣捆绑调教| 久久综合伊人77777| 久久精品国产清自在天天线| 国产成人精品久久一区二区三区av| 国产情侣久久久久aⅴ免费| 狠狠综合久久综合88亚洲| 模特私拍国产精品久久| 日韩人妻无码一区二区三区久久99| 亚洲国产成人久久一区WWW| 久久天天日天天操综合伊人av| 久久久久久国产a免费观看不卡 | 狠狠精品久久久无码中文字幕|