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

            笑看風云淡

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

            DOM 讀寫XML文件

            Posted on 2008-08-28 11:53 天之驕子 閱讀(650) 評論(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 初始化指向根節點;注意相當于數據庫database
            //IXMLDOMNodeList 子節點鏈表;注意相當于表table;或者相當于記錄recordset
            //IXMLDOMNode 子節點鏈表中指定節點的指針;注意相當于得到表中指定的一條記錄,也可以是單個字段

            /*

            #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文檔元素指針,初始化指向根節點;注意相當于數據庫database
               IXMLDOMElementPtr ptrDocRoot=NULL;
               hr=ptrXMLFile->get_documentElement(&ptrDocRoot);
               if(SUCCEEDED(hr)&&ptrDocRoot!=NULL)
               {
                
                //獲取子節點鏈表;注意相當于表table;或者相當于記錄recordset
                IXMLDOMNodeListPtr ptrProductList=NULL;
                hr=ptrDocRoot->get_childNodes(&ptrProductList);
                if(SUCCEEDED(hr)&& ptrProductList!=NULL)
                {
                 //獲取子節點鏈表中的個數;注意相當于得到記錄的個數
                 long productNum=0;
                 hr=ptrProductList->get_length(&productNum);
                 if(SUCCEEDED(hr)&& productNum)
                 {
                  
                  //獲取子節點鏈表中指定節點的指針;注意相當于得到表中指定的一條記錄,
                  //這里是相當整個字段
                  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,這里也就是最小標簽元素
                   IXMLDOMNodePtr Field=NULL;
                   _bstr_t bField;
                   BSTR Text=NULL;
                   bField="name";
                   
                   //獲取name元素的內容
                   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元素的內容
                   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元素的內容
                                        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元素的內容
                   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元素的內容
                   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元素的內容
                   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;
            }

            漂亮人妻被黑人久久精品| 久久夜色精品国产亚洲| 色8激情欧美成人久久综合电| 亚洲国产精品成人久久蜜臀| 亚洲欧美日韩久久精品| 日本强好片久久久久久AAA| 久久婷婷国产麻豆91天堂| 色综合久久中文字幕综合网| 亚洲精品无码久久久久| 久久超乳爆乳中文字幕| 欧美成a人片免费看久久| 性色欲网站人妻丰满中文久久不卡| 99久久国语露脸精品国产| 天天做夜夜做久久做狠狠| AV狠狠色丁香婷婷综合久久| 久久亚洲视频| 久久精品国产69国产精品亚洲| 综合久久精品色| 国产—久久香蕉国产线看观看| 亚洲色大成网站WWW久久九九| 91麻豆精品国产91久久久久久 | 精品国产VA久久久久久久冰| 久久久久这里只有精品| 久久亚洲AV成人出白浆无码国产| 久久久精品无码专区不卡| 国产精品99久久免费观看| 中文字幕精品无码久久久久久3D日动漫| 久久不见久久见免费视频7| 欧美亚洲国产精品久久高清| 久久国产成人| 久久久久综合国产欧美一区二区| 国产成人久久激情91| 久久狠狠高潮亚洲精品| 亚洲αv久久久噜噜噜噜噜| 99精品国产免费久久久久久下载| 国产精品嫩草影院久久| 亚洲国产成人久久综合碰碰动漫3d | 久久伊人影视| 亚洲欧洲久久久精品| 午夜精品久久久久久影视777| 国产午夜精品理论片久久|