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

            久久久精品2019免费观看| 久久精品国产久精国产果冻传媒| 伊人久久大香线蕉av不变影院| 久久婷婷五月综合成人D啪| 色欲综合久久躁天天躁| 亚洲级αV无码毛片久久精品| 国产午夜精品久久久久免费视| 国产成人AV综合久久| 精品久久久久久国产| 亚洲国产成人久久综合碰碰动漫3d| 国内精品伊人久久久久网站| 亚洲AV无一区二区三区久久| 国产成人久久久精品二区三区| 久久SE精品一区二区| 久久精品国产99久久丝袜| 久久天天躁狠狠躁夜夜网站| 国产亚洲色婷婷久久99精品91| 三上悠亚久久精品| 久久久WWW成人免费毛片| 人妻丰满AV无码久久不卡 | 久久91精品国产91久久户| 久久亚洲AV无码西西人体| 亚洲国产精品高清久久久| 污污内射久久一区二区欧美日韩| 秋霞久久国产精品电影院| 久久精品一本到99热免费| 久久婷婷五月综合成人D啪| 99热都是精品久久久久久| 精品久久久久久亚洲精品| 色8久久人人97超碰香蕉987| 精品国产乱码久久久久软件| 久久综合五月丁香久久激情| 久久99久久99小草精品免视看 | 亚洲伊人久久精品影院| 久久久久婷婷| 久久久久久无码国产精品中文字幕 | 97精品久久天干天天天按摩| 一本一道久久综合狠狠老| 久久精品国产色蜜蜜麻豆| | 国产伊人久久|