• <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)云淡

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

            DOM 讀寫(xiě)XML文件

            Posted on 2008-08-28 11:53 天之驕子 閱讀(661) 評(píng)論(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é)點(diǎn);注意相當(dāng)于數(shù)據(jù)庫(kù)database
            //IXMLDOMNodeList 子節(jié)點(diǎn)鏈表;注意相當(dāng)于表table;或者相當(dāng)于記錄recordset
            //IXMLDOMNode 子節(jié)點(diǎn)鏈表中指定節(jié)點(diǎn)的指針;注意相當(dāng)于得到表中指定的一條記錄,也可以是單個(gè)字段

            /*

            #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é)點(diǎn);注意相當(dāng)于數(shù)據(jù)庫(kù)database
               IXMLDOMElementPtr ptrDocRoot=NULL;
               hr=ptrXMLFile->get_documentElement(&ptrDocRoot);
               if(SUCCEEDED(hr)&&ptrDocRoot!=NULL)
               {
                
                //獲取子節(jié)點(diǎn)鏈表;注意相當(dāng)于表table;或者相當(dāng)于記錄recordset
                IXMLDOMNodeListPtr ptrProductList=NULL;
                hr=ptrDocRoot->get_childNodes(&ptrProductList);
                if(SUCCEEDED(hr)&& ptrProductList!=NULL)
                {
                 //獲取子節(jié)點(diǎn)鏈表中的個(gè)數(shù);注意相當(dāng)于得到記錄的個(gè)數(shù)
                 long productNum=0;
                 hr=ptrProductList->get_length(&productNum);
                 if(SUCCEEDED(hr)&& productNum)
                 {
                  
                  //獲取子節(jié)點(diǎn)鏈表中指定節(jié)點(diǎn)的指針;注意相當(dāng)于得到表中指定的一條記錄,
                  //這里是相當(dāng)整個(gè)字段
                  IXMLDOMNodePtr ptrProduct=NULL;
                  static long NodeNum=0;//注意事項(xiàng)記錄號(hào)index
                  hr=ptrProductList->get_item(NodeNum,&ptrProduct);
                  loop=true;
                  NodeNum++;
                  if(NodeNum>productNum)
                  { loop=false; }
                  
                  if(SUCCEEDED(hr)&&ptrProduct!=NULL)
                  {
                   
                   //單個(gè)字段,及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;
            }


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


            久久亚洲日韩看片无码| 亚洲AV无码久久| 久久久中文字幕日本| 亚洲精品无码专区久久同性男| 香蕉久久av一区二区三区| 久久九九久精品国产免费直播| 91久久精品国产免费直播| 亚洲国产精品一区二区久久hs| 久久人人爽人人爽人人片AV不| 久久se精品一区二区影院| 久久精品国产99久久香蕉| 久久精品国产国产精品四凭| 性做久久久久久久久老女人| 狠狠狠色丁香婷婷综合久久俺| 国产三级久久久精品麻豆三级| 国内精品久久久久久久久电影网| 久久久久久久久无码精品亚洲日韩 | AV色综合久久天堂AV色综合在 | 久久91精品国产91久久户| 国产成人久久AV免费| 久久露脸国产精品| 激情五月综合综合久久69| 久久久国产精华液| 久久久久久久综合日本| 久久久久99精品成人片试看| 亚洲国产精品久久久天堂| 久久精品国产一区二区电影| 久久久久久精品成人免费图片| 69SEX久久精品国产麻豆| 青青青青久久精品国产h久久精品五福影院1421 | 久久人人爽人爽人人爽av| 亚洲精品国精品久久99热一| 91精品国产综合久久婷婷| 97精品伊人久久久大香线蕉| 99re久久精品国产首页2020| 久久久久九国产精品| 久久国产美女免费观看精品| 99久久国产宗和精品1上映| 狠狠色丁香婷婷久久综合五月| 综合久久一区二区三区 | 国产精品成人久久久久三级午夜电影 |