• <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>

            笑看風(fēng)云淡

            寵辱不驚,看庭前花開花落;去留無意,望天空云卷云舒
            posts - 96, comments - 48, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

            DOM 讀寫XML文件

            Posted on 2008-08-28 11:53 天之驕子 閱讀(651) 評論(0)  編輯 收藏 引用

            //定義智能接口指針
            #include<comdef.h>
            #include<msxml.h>
            _COM_SMARTPTR_TYPEDEF(IXMLDOMDocument,__uuidof(IXMLDOMDocument));
            _COM_SMARTPTR_TYPEDEF(IXMLDOMElement,__uuidof(IXMLDOMElement));
            _COM_SMARTPTR_TYPEDEF(IXMLDOMNodeList,__uuidof(IXMLDOMNodeList));
            _COM_SMARTPTR_TYPEDEF(IXMLDOMNode,__uuidof(IXMLDOMNode));
            //IXMLDOMElement 初始化指向根節(jié)點;注意相當(dāng)于數(shù)據(jù)庫database
            //IXMLDOMNodeList 子節(jié)點鏈表;注意相當(dāng)于表table;或者相當(dāng)于記錄recordset
            //IXMLDOMNode 子節(jié)點鏈表中指定節(jié)點的指針;注意相當(dāng)于得到表中指定的一條記錄,也可以是單個字段

            /*

            #import <msxml.dll> named_guids
            using namespace MSXML;
            替代上面

            */

             

            bool GetxmlData(void)
            {
             bool loop=false;
             //XML文檔指針
             HRESULT hr=S_OK;
                IXMLDOMDocumentPtr ptrXMLFile=NULL;
             hr=ptrXMLFile.CreateInstance(CLSID_DOMDocument);
             if(SUCCEEDED(hr)&& ptrXMLFile!=NULL)
             {
              //得到XML文件的路徑
              CStringA path;
              m_HttpRequest.GetPhysicalPath(path);
              path.Append("Product.xml");
              
              //加載XML文檔
                    VARIANT_BOOL vbLoaded=VARIANT_FALSE;
              ptrXMLFile->put_async(VARIANT_FALSE);
              ptrXMLFile->load(_variant_t(path),&vbLoaded);
              
              //成功加載后的處理
              if(SUCCEEDED(hr)&& vbLoaded==VARIANT_TRUE)
              {
               
               //XML文檔元素指針,初始化指向根節(jié)點;注意相當(dāng)于數(shù)據(jù)庫database
               IXMLDOMElementPtr ptrDocRoot=NULL;
               hr=ptrXMLFile->get_documentElement(&ptrDocRoot);
               if(SUCCEEDED(hr)&&ptrDocRoot!=NULL)
               {
                
                //獲取子節(jié)點鏈表;注意相當(dāng)于表table;或者相當(dāng)于記錄recordset
                IXMLDOMNodeListPtr ptrProductList=NULL;
                hr=ptrDocRoot->get_childNodes(&ptrProductList);
                if(SUCCEEDED(hr)&& ptrProductList!=NULL)
                {
                 //獲取子節(jié)點鏈表中的個數(shù);注意相當(dāng)于得到記錄的個數(shù)
                 long productNum=0;
                 hr=ptrProductList->get_length(&productNum);
                 if(SUCCEEDED(hr)&& productNum)
                 {
                  
                  //獲取子節(jié)點鏈表中指定節(jié)點的指針;注意相當(dāng)于得到表中指定的一條記錄,
                  //這里是相當(dāng)整個字段
                  IXMLDOMNodePtr ptrProduct=NULL;
                  static long NodeNum=0;//注意事項記錄號index
                  hr=ptrProductList->get_item(NodeNum,&ptrProduct);
                  loop=true;
                  NodeNum++;
                  if(NodeNum>productNum)
                  { loop=false; }
                  
                  if(SUCCEEDED(hr)&&ptrProduct!=NULL)
                  {
                   
                   //單個字段,及name,這里也就是最小標(biāo)簽元素
                   IXMLDOMNodePtr Field=NULL;
                   _bstr_t bField;
                   BSTR Text=NULL;
                   bField="name";
                   
                   //獲取name元素的內(nèi)容
                   hr=ptrProduct->selectSingleNode(bField,&Field);
                   if(SUCCEEDED(hr)&& Field!=NULL)
                   {
                    Field->get_text(&Text);//修改用Field->put_text(&Text);
                    m_name=Text;
                    Text=NULL;
                    Field=NULL;
                   }
                   
                   //獲取price1元素的內(nèi)容
                   bField="price1";
                   hr=ptrProduct->selectSingleNode(bField,&Field);
                   CString S1;
                   wchar_t * S2;
                   if(SUCCEEDED(hr)&& Field!=NULL)
                   {
                    Field->get_text(&Text);
                    S1=Text;
                    S2=S1.GetBuffer(S1.GetLength());
                    S1.ReleaseBuffer();
                    m_price[0]=_wtof(S2);
                     SysFreeString(Text);
                    Text=NULL;
                    Field=NULL;
                   }
                   
                   //獲取price2元素的內(nèi)容
                                        bField="price2";
                   hr=ptrProduct->selectSingleNode(bField,&Field);
                   if(SUCCEEDED(hr)&& Field!=NULL)
                   {
                    Field->get_text(&Text);
                    S1=Text;
                    S2=S1.GetBuffer(S1.GetLength());
                    S1.ReleaseBuffer();
                    m_price[1]=_wtof(S2);
                     SysFreeString(Text);
                    Text=NULL;
                    Field=NULL;
                   }
                   
                   //獲取price3元素的內(nèi)容
                   bField="price3";
                   hr=ptrProduct->selectSingleNode(bField,&Field);
                   if(SUCCEEDED(hr)&& Field!=NULL)
                   {
                    Field->get_text(&Text);
                    S1=Text;
                    S2=S1.GetBuffer(S1.GetLength());
                    S1.ReleaseBuffer();
                    m_price[2]=_wtof(S2);
                     SysFreeString(Text);
                    Text=NULL;
                    Field=NULL;
                   }
                   
                   //獲取price4元素的內(nèi)容
                   bField="price4";
                   hr=ptrProduct->selectSingleNode(bField,&Field);
                   if(SUCCEEDED(hr)&& Field!=NULL)
                   {
                    Field->get_text(&Text);
                    S1=Text;
                    S2=S1.GetBuffer(S1.GetLength());
                    S1.ReleaseBuffer();
                    m_price[3]=_wtof(S2);
                     SysFreeString(Text);
                    Text=NULL;
                    Field=NULL;
                   }
                   
                   //獲取price5元素的內(nèi)容
                   bField="price5";
                   hr=ptrProduct->selectSingleNode(bField,&Field);
                   if(SUCCEEDED(hr)&& Field!=NULL)
                   {
                    Field->get_text(&Text);
                    S1=Text;
                    S2=S1.GetBuffer(S1.GetLength());
                    S1.ReleaseBuffer();
                    m_price[4]=_wtof(S2);
                     SysFreeString(Text);
                    Text=NULL;
                    Field=NULL;
                   }
                   ptrProduct=NULL;

                  }
                 }
                 ptrProductList=NULL;
                }
                ptrDocRoot=NULL;
               }
              }
              ptrXMLFile=NULL;
             }
             m_start=true;
             return loop;
            }


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久久久九九精品影院| 久久国产V一级毛多内射| 国产亚洲精品久久久久秋霞| 偷偷做久久久久网站| 国产精品女同久久久久电影院| 久久se精品一区精品二区| 色综合久久中文色婷婷| 亚洲国产成人久久一区WWW| 久久精品国产亚洲AV无码偷窥| 久久精品无码专区免费| 狠狠色噜噜色狠狠狠综合久久| 久久久青草久久久青草| 久久久精品久久久久影院| 久久妇女高潮几次MBA| 久久99精品综合国产首页| 久久亚洲sm情趣捆绑调教| 国产精品美女久久久网AV| 久久香综合精品久久伊人| 久久性生大片免费观看性| 久久―日本道色综合久久| 97久久婷婷五月综合色d啪蜜芽 | 97r久久精品国产99国产精| 久久国产三级无码一区二区| 精品久久久久久中文字幕| 漂亮人妻被黑人久久精品| 国产一区二区久久久| 久久伊人五月天论坛| 久久精品国产第一区二区| 久久99精品国产99久久6男男| 色婷婷综合久久久中文字幕| 久久久久波多野结衣高潮| 中文字幕精品无码久久久久久3D日动漫| 亚洲狠狠久久综合一区77777| 久久天天躁狠狠躁夜夜网站| 性欧美丰满熟妇XXXX性久久久| 中文字幕无码久久人妻| 亚洲欧美一级久久精品| 国内精品久久久久影院老司| 2021国内精品久久久久久影院| 一级a性色生活片久久无| 亚洲а∨天堂久久精品9966|