浙江福彩3d走势图
我們來自五湖四海,不為別的,只因有共同的愛好,為中國互聯網發展出一分力!

C++中處理XML文件

2013年04月28日03:40 閱讀: 15567 次

     寫Unmanaged Code在.NET時代成為一種很悲慘的事,當你需要處理XML文件時,這種感覺會變得尤其強烈。FCL中的System.XML多簡單啊,連Steve Ballmer都知道怎么用。

    事情不會總是那么理想的,如果你要在C/C++程序里處理XML怎么辦呢?

    選擇一:市面上的XML lib還是有幾個的,最有名的當然是libXML。我一年前用過,很不錯,我還特意寫了一份簡明教程,后來不知擱哪兒了。

    選擇二:MS的MSXML,我要介紹的就是這個。

    先說一下在MSDN哪里找文檔吧,往下看的時候也好有個參考:在Index里打:Windows Media Services 9 Series SDK=>Programming Reference=>Programming Reference (C++)=>XML DOM Interfaces (C++)。什么?Windows Media?呵呵,不錯,我覺得這個guide反而是最清楚的,你直接找MSXML,得到的結果,我覺得還沒這個好。

    在C程序里調用MSXML基本就是一堆COM接口,不過在Visual Studio里操作先要做點簡單的設置:

    在你的Project里Add References=>COM標簽=>Microsoft XML v4.0,5.0其實也有了,但因為是和Office一起發布的,覺得有點怪,不想用,反正也未必用什么很怪異的功能,4.0可以了。

 

    然后在加入這兩行:

    #include <msXML2.h>
    #import <msXML4.dll>

    頭文件和dll庫。什么?在哪里加?頭文件或者c/cpp文件啊,哪里合適放哪兒。

    然后就開始編程了,先定義兩個必用的變量:

    IXMLDOMDocumentPtr XMLFile = NULL;
    IXMLDOMElement* XMLRoot = NULL;

    為什么是必用的?  汗...

    第一步當然是初始化COM:

    if(FAILED(CoInitialize(NULL))) ....

    接下來初始化XMLFile對象:

    if(FAILED(XMLFile.CreateInstance("MsXML2.DOMDocument.4.0"))) ...

    然后就可以加載XML文件了:

    _variant_t varXML(L"C:\\test.XML"); //L for unicode
    VARIANT_BOOL varOut;
    XMLFile->load(varXML, &varOut);

    取得root element:

    XMLFile->get_documentElement(&XMLRoot))

    取得第一級element:

    IXMLDOMNodeList* XMLChildNodes = NULL;
    XMLRoot->get_childNodes(&XMLChildNodes);

    遍歷所有第一級element:

    IXMLDOMNode* currentNode = NULL;
    while(!FAILED(XMLChildNodes->nextNode(&currentNode)) && currentNode != NULL)

 

[1] [2] [3] [4] 下一頁

分享到: 更多
藍客門戶
©2001-2019 中國藍客聯盟 版權所有.
關于藍客聯盟歷史宗旨章程技術服務聯系我們藍客社區

浙江福彩3d走势图