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

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

            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文件的根節點
                if(SUCCEEDED(hr))
                {
                 BSTR bsxml;
                 //解析XML文件,一層一層的解析
                 pNode->hasChildNodes(&vBool);

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

                  //獲取子節點的個數
                  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;

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

                   if (leng > 0)
                   {

                    IXMLDOMNode *pSubNode = NULL;

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

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

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

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

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

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

                      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的釋放比較費時,不可頻繁的使用,如果使用比較頻繁,可能出現內存泄露。

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

            午夜精品久久久久久中宇| 99热都是精品久久久久久| 欧美激情精品久久久久久| 久久久久女教师免费一区| 亚洲国产精品成人久久蜜臀| 久久精品国产亚洲AV影院| 精品久久久久久久久中文字幕| 久久人人爽人人精品视频| 99久久国产宗和精品1上映 | 久久久久久久人妻无码中文字幕爆| 久久这里只有精品18| 国内精品久久久久久麻豆| 久久综合久久美利坚合众国| av无码久久久久久不卡网站| 久久夜色精品国产亚洲| 国产精品久久99| 老男人久久青草av高清| 亚洲精品高清久久| 久久久久99精品成人片直播| 欧美午夜A∨大片久久| 久久精品亚洲日本波多野结衣 | 国产69精品久久久久观看软件| 久久久久国产精品| 午夜久久久久久禁播电影| 亚洲欧洲精品成人久久奇米网| 久久国产精品久久久| 国内精品综合久久久40p| 色欲综合久久躁天天躁| 国产精品午夜久久| 久久―日本道色综合久久| 欧美黑人又粗又大久久久| 亚洲а∨天堂久久精品| 青青草国产精品久久| 99国产欧美精品久久久蜜芽| 婷婷五月深深久久精品| 久久午夜无码鲁丝片秋霞| 四虎影视久久久免费| 久久久这里只有精品加勒比| 久久夜色精品国产噜噜亚洲a| 久久久久久亚洲精品无码| 噜噜噜色噜噜噜久久|