• <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 閱讀(1684) 評論(0)  編輯 收藏 引用 所屬分類: PDA/PPC開發

            亚洲香蕉网久久综合影视| 99久久99久久精品国产| 久久WWW免费人成一看片| 18岁日韩内射颜射午夜久久成人| 久久精品国产久精国产果冻传媒| 久久久久亚洲Av无码专| 久久亚洲精品无码观看不卡| 亚洲AV无码久久精品成人 | 欧美精品丝袜久久久中文字幕 | 国产精品久久久久久福利漫画| 91久久婷婷国产综合精品青草| 国产A级毛片久久久精品毛片| 日韩欧美亚洲综合久久| 人人狠狠综合久久亚洲婷婷| 久久久久久久精品成人热色戒| 久久精品男人影院| 亚洲中文字幕无码久久2017| 国内精品久久久久久久影视麻豆| 99久久国产宗和精品1上映| 久久久久国产精品嫩草影院| 久久国产精品成人片免费| 欧美一区二区久久精品| 激情久久久久久久久久| 久久国产乱子伦精品免费强| 亚洲国产精品无码久久久蜜芽 | 99热精品久久只有精品| 精品永久久福利一区二区| 一本色道久久综合狠狠躁| 久久免费视频6| 色婷婷久久久SWAG精品| 久久久久无码中| 久久综合久久鬼色| 精品综合久久久久久88小说| 亚洲国产成人久久精品动漫| 久久―日本道色综合久久| 久久九九有精品国产23百花影院| 久久99精品久久久久久久不卡| 亚洲国产精品高清久久久| 久久精品免费一区二区| 亚洲成色WWW久久网站| 99久久人妻无码精品系列|