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

            Benjamin

            靜以修身,儉以養(yǎng)德,非澹薄無以明志,非寧靜無以致遠。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

            WM5.0下如何利用微軟的MSXML解析.XML文件

            MSXL是Microsoft XML 分析器,是基于COM的,如果是在Windows平臺用起來比較方便。WM5.0也有MSXML,不用用法和其他Windows平臺下還是有些差異的。
            首先要包含頭文件“Msxml2.h”,下面是代碼:
            IXMLDOMDocument *pDoc = NULL;
             IXMLDOMNodeList *pNodelist = NULL;

             IXMLDOMNode *pNode = NULL;
             IXMLDOMElement *pRootElement = NULL;

             if(SUCCEEDED(CoInitializeEx(NULL,COINIT_MULTITHREADED)))//初始化COM組件
             {
              if(SUCCEEDED(CoCreateInstance(CLSID_DOMDocument,NULL,CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,IID_IXMLDOMDocument,(void**)&pDoc)))
              {
               VARIANT vFile;
               vFile.vt = VT_BSTR ;
               VARIANT_BOOL vBool;

               vFile.bstrVal = SysAllocString(FileName);//.XML文件名

               pDoc->load(vFile,&vBool);//加載XML文件
               if(vBool != VARIANT_TRUE)
                return ;
               /////////////////////////
               HRESULT hr; 
               hr = pDoc->get_documentElement(&pRootElement);
               if(SUCCEEDED(hr))
               {
                hr = pRootElement->QueryInterface(IID_IXMLDOMNode,(void**)&pNode);//獲取XML文件的根節(jié)點
                if(SUCCEEDED(hr))
                {
                 BSTR bsxml;
                 //解析XML文件,一層一層的解析
                 pNode->hasChildNodes(&vBool);

                 if(vBool == VARIANT_TRUE)
                 {
                  hr = pNode->get_nodeName(&bsxml);

                  //獲取子節(jié)點的個數(shù)
                  long value;
                  pNode->get_childNodes(&pNodelist);
                  pNode->Release();
                  pNodelist->get_length(&value);

                  for(int k = 0; k < value; ++ k)
                  {
                   BSTR bsxml1;
                   pNodelist->get_item(k,&pNode);
                   pNode->get_nodeName(&bsxml1);


                   IXMLDOMNodeList *pSubNodelist = NULL;

                   //獲取孫節(jié)點的個數(shù)
                   pNode->get_childNodes(&pSubNodelist);
                   pNode->Release();
                   long leng;
                   pSubNodelist->get_length(&leng);

                   if (leng > 0)
                   {

                    IXMLDOMNode *pSubNode = NULL;

                           //解析最下層的節(jié)點
                    for(int i = 0; i < leng; ++i)
                    {

                     pSubNodelist->get_item(i,&pSubNode);
                     pSubNode->get_nodeName(&bsxml);

              //判斷節(jié)點的屬性,如果是注釋屬性,則放棄
                     DOMNodeType           ntValue;
                    pSubNode->get_nodeType((&ntValue);
                    if(NODE_COMMENT == ntValue)//也可以判斷其他的屬性,具體的查看MSDN
                         continue;;
                    

                     //獲取節(jié)點的屬性個數(shù)
                     IXMLDOMElement* pElement = (IXMLDOMElement*)pSubNode;
                     IXMLDOMNamedNodeMap* pMap;
                     pElement->get_attributes(&pMap);
                     pSubNode->Release();

                     long len;
                     pMap->get_length(&len);

                     //循環(huán)讀取節(jié)點的各個屬性(值和名字)
                     for(int j = 0; j < len; ++j)
                     {
                     //如果還有下層的節(jié)點,繼續(xù)循環(huán)

                      IXMLDOMNode* nameItem;
                      VARIANT var;
                      pMap->get_item(j,&nameItem);

                      //獲取屬性名
                      BSTR NAME;
                      nameItem->get_nodeName(&NAME);


                      //獲取屬性值
                      nameItem->get_nodeValue(&var);
                      LPWSTR VAL = var.bstrVal;

                      int a = 9;

                     }

                    }
                    pSubNodelist->Release();
                   }
                  }
                  pNodelist->Release();
                 }
                 else
                  pNode->Release();
                }
               }
               //////////////////////////
               pDoc->Release();
              }
              CoUninitialize();

             }

            上面的代碼可以用于win32和MFC工程,比較方便。 注意:這個COM的釋放比較費時,不可頻繁的使用,如果使用比較頻繁,可能出現(xiàn)內(nèi)存泄露。

            posted on 2008-11-01 22:27 Benjamin 閱讀(1681) 評論(0)  編輯 收藏 引用 所屬分類: PDA/PPC開發(fā)

            久久久WWW成人| 久久亚洲日韩精品一区二区三区| 久久综合亚洲鲁鲁五月天| 久久精品成人一区二区三区| 久久er热视频在这里精品| 久久久久亚洲AV无码网站| 国产精品久久久久久久久久影院| 日日噜噜夜夜狠狠久久丁香五月| 久久久WWW成人免费精品| 狠狠综合久久AV一区二区三区| 亚洲国产成人久久综合碰碰动漫3d | 国产精品久久新婚兰兰| 久久人人爽人人爽人人片av麻烦| 久久综合亚洲色HEZYO社区 | 丁香色欲久久久久久综合网| 777午夜精品久久av蜜臀| 久久精品欧美日韩精品| 久久亚洲中文字幕精品有坂深雪| 久久精品国产福利国产琪琪| 亚洲午夜无码久久久久| 久久综合九色欧美综合狠狠| 国产精品久久久久影视不卡| 精品久久久久久无码不卡| 久久香综合精品久久伊人| 伊人久久大香线蕉无码麻豆| 久久99国产亚洲高清观看首页| 久久久亚洲裙底偷窥综合| 欧美无乱码久久久免费午夜一区二区三区中文字幕| 国产精品99久久久精品无码| 97超级碰碰碰碰久久久久| 久久热这里只有精品在线观看| 久久99热这里只有精品国产 | 99久久国产综合精品成人影院| 久久久久亚洲av无码专区导航| 亚洲精品无码久久久久AV麻豆| 久久免费精品视频| 亚洲国产精品久久66| 中文字幕久久欲求不满| 久久香蕉一级毛片| 国产福利电影一区二区三区,免费久久久久久久精 | 久久乐国产综合亚洲精品|