• <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 天之驕子 閱讀(653) 評論(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;
            }

            久久精品人人做人人爽电影蜜月| 久久频这里精品99香蕉久| 成人久久免费网站| 亚洲国产精品无码久久久秋霞2| 精品国际久久久久999波多野| 99久久婷婷国产综合精品草原| 日韩精品无码久久一区二区三 | 热RE99久久精品国产66热| 久久综合给合综合久久| 狠狠色丁香婷婷综合久久来| 国产精品美女久久福利网站| 久久久国产精品网站| 久久精品国产亚洲AV无码麻豆| 91精品国产综合久久四虎久久无码一级 | 亚洲国产成人精品91久久久 | 久久久久一级精品亚洲国产成人综合AV区| 欧美日韩中文字幕久久久不卡| 久久发布国产伦子伦精品| 久久影视综合亚洲| 国产精品免费看久久久香蕉| 欧美亚洲国产精品久久蜜芽| 免费精品久久久久久中文字幕| 久久精品国产亚洲77777| 色妞色综合久久夜夜| 亚洲Av无码国产情品久久| 久久99精品免费一区二区| 国产精品午夜久久| 九九久久99综合一区二区| 久久精品国产99久久无毒不卡 | 久久天天躁夜夜躁狠狠| 国产精品一区二区久久精品涩爱| 精品久久久久久无码国产| 亚洲国产成人久久综合一 | 精品免费tv久久久久久久| 亚洲午夜久久久久久久久久| 2021久久精品免费观看| 欧美精品丝袜久久久中文字幕| 久久国产成人午夜aⅴ影院| 久久精品一区二区影院 | 午夜精品久久久久久久无码| 亚洲欧洲精品成人久久奇米网|