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

            久久精品蜜芽亚洲国产AV| 亚洲精品无码久久毛片| 久久免费美女视频| 精品久久久久久久中文字幕| 久久精品亚洲欧美日韩久久| 2020国产成人久久精品| 无码人妻久久一区二区三区免费丨 | 久久婷婷五月综合国产尤物app| www.久久热.com| 一级做a爰片久久毛片看看| 久久水蜜桃亚洲av无码精品麻豆 | 东方aⅴ免费观看久久av| 国产美女久久精品香蕉69| 国产精品久久婷婷六月丁香| 久久99久久99小草精品免视看| 亚洲精品无码久久久| 久久国产免费直播| 久久久久国产精品| 久久久久久毛片免费播放| 久久久精品久久久久影院| 久久精品国产精品亜洲毛片| 91精品国产乱码久久久久久| 久久婷婷午色综合夜啪| 久久青青草原精品国产软件| 色综合色天天久久婷婷基地| 久久99精品国产自在现线小黄鸭| 久久中文字幕精品| 手机看片久久高清国产日韩| 国产精品久久久天天影视香蕉| 亚洲国产精品久久66| 国产精品久久一区二区三区| 国产成人无码久久久精品一| 久久精品国产网红主播| 久久青青草原亚洲av无码app| 久久人人爽人人爽人人片AV东京热| 久久精品免费观看| 99久久99久久精品国产片果冻| 久久99久久99小草精品免视看 | 91精品婷婷国产综合久久| 青青草国产精品久久久久| AAA级久久久精品无码片|