• <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>
            隨筆 - 64, 文章 - 11, 評論 - 12, 引用 - 0
            數據加載中……

            MSXML 使用 《基礎》

            XML 概況

            XML解析器介紹

            搭建MSXML的使用環境

            MSXML 中的DOM模型

            XML 概況

                可擴展標記語言(Extensible Markup Language 簡寫為XML)與HTML一樣屬于標準通用標記語言(Standard Generalized Markup Language 簡寫SGML)的子集。由于XML具有簡潔有效、易學易用,是開放的國際化標準和高可擴展性等優點,所以可預見XML將被更為廣泛地使用。

            XML解析器介紹

                為了在日常的工作中操作XML文件,我曾經也封裝了一個XML的操作類。這個類可以完成添加節點,刪除節點,修改節點的功能,但是我到現在還是沒有找到一個方案封裝查找節點的行為,由于存在一個這樣的缺陷,所以也就一直不敢發表。封裝的類底層操作是通過MSXML來完成,我只不過為眾多常用的應用提供方便。MSXML提供了兩種方式來解析XML,分別是DOM和SAX的方式,功能頗為強大豐富。當通過C++來使用MSXML時,因為會涉及到接口和智能指針等一些COM類型或者結構等,所以使用起來也須細心地照管好接口等,否則較容易出現未釋放或者釋放空指針等的錯誤。通過腳本語言來使用MSXML就很方便,我們不用再自己去照管接口等。在網頁我們經常可以看見javascript使用MSXML來操作XML的例子。

                在前陣子,我也經常使用CMarkup類。由于我使用的是免費的,這個類可以從網上下載。使用起來也非常簡單直觀,可以說易使用性相當高。畢竟是免費的,所以它的功能有限,存在不能刪除節點的不足,如果在應用中要刪除節點時就不適合了。所以在使用這個類時,我還是搭著自己封裝的類來使用。

                曾經,為項目組到底該應用哪種XML解析器而思慮了些日子,也曾去試過一些庫。如TinyXml,它只支持DOM方式解析XML,就一般的應用來說基本上都是選DOM方式來操作XML。通過使用認為可以說它完全可以滿足我們的需要,但是它支持char字符類型,這給應用帶來了些麻煩,為了使用它我們必須為它傳char字符,但我們在應用開發中都是要用TCHAR這種字符類型,經常的字符轉換增加了復雜性。我真的希望它是支持UNICODE的,在網上也曾看過文章介紹如何讓它支持UNICODE,可我還沒有嘗試過。

                C++解析XML庫除了上面列舉的幾種之外,還有ACE和Xerces。Xerces是一個開放源碼的庫,而且還支持SAX模型。這里主要介紹MSXML,如果應用程序要求在非 windows系統下運行,就不適應用MSXML。

             

            搭建MSXML的使用環境

            MSXML是Microsoft XML Core Services短語的縮寫詞。通過一組織良好的COM接口向用戶提供操作XML的高效方法,COM服務器一般隨著windows操作系統一起安裝。COM服務器(這里是指msxml版號.dll)位于windows\System32目錄下,這個目錄下通常會有多個MSXML*.dll,在使用時可以根據需要而選擇適當的服務器。關于各個版本的功能或者說差異可以查看相關的文檔,一般來說后續的版本是以前版本的升級,功能上都有所增強。

            由于MSXML是通過COM服務器來提供,在使用COM服務器時我們必須能知道其中接口和GUID等信息。目前,主要有以下幾種方式來提供:(1)頭文件,(2)tlb文件

            (3)直接通過導入DLL的方式來得到。在幫助文檔中介紹的是使用第三種方式,#import <msxml6.dll> 在導入時我們可以指定較多的選項,如命名空間,接口包裝等等。我通常使用的是第三種方式。在導入之后,我們可以用原始的COM接口方式,也可以使用經過簡單包裝的智能接口來編寫程序。在使用包赱的智能指針類時,為了不與SDK的Include目錄中的msxml*.h中的定義沖突,在編寫程序時可以使用帶命名空間的方式訪問,命名空間可以看debug目錄的.tlh文件。

             

            MSXML 中的DOM模型

                MSXML的DOM模型編程接口主要有DOMDocument,IXMLDOMNode,IXMLDOMNodeList(節點集合),IXMLDOMNamedNodeMap(屬性集合)。從下面這張圖中可以看出有許多其它的接口IXMLDOMElement、IXMLDOMText等等,它們都是以IXMLDOMNode為基類。這些接口都可以與XML中的DOM元素都可以對應起來。IXMLDOMDocument就對應了XML文檔,這個接口還實現持久化的接口。

                

                XML中的DOM模型如下,這個圖和xml摘自互聯網。

             

            <bookstore>

            <book category="COOKING">

            <title lang="en">Everyday Italian</title>

            <author>Giada De Laurentiis</author>

            <year>2005</year>

            <price>30.00</price>

            </book>

            <book category="CHILDREN">

            <title lang="en">Harry Potter</title>

            <author>J K. Rowling</author>

            <year>2005</year>

            <price>29.99</price>

            </book>

            <book category="WEB">

            <title lang="en">Learning XML</title>

            <author>Erik T. Ray</author>

            <year>2003</year>

            <price>39.95</price>

            </book>

            </bookstore>

             

            IXMLDOMDocument對應整個文檔,IXMLDOMElement對應<bookstore>,<book>,<title>,<ahutor>,<year>,<price>等。IXMLDOMText對應著Everyday Italian等及屬性中的值。IXMLDOMAttribute對應著category="CHILDREN",屬性節點中包含有IXMLDOMText節點。

            posted on 2009-07-06 14:51 Robertxiao 閱讀(1488) 評論(0)  編輯 收藏 引用

            久久精品国产亚洲7777| 中文精品久久久久人妻| 久久国产精品一国产精品金尊| 久久久久久精品久久久久| 久久人妻AV中文字幕| 久久久久久久亚洲Av无码| 久久综合综合久久97色| 久久精品国产国产精品四凭| 久久频这里精品99香蕉久| 婷婷久久久亚洲欧洲日产国码AV| 精品综合久久久久久888蜜芽| 精品无码人妻久久久久久| 99久久99久久精品国产片果冻| 久久精品国产69国产精品亚洲| 久久亚洲精品国产亚洲老地址| 99国产欧美久久久精品蜜芽| 亚洲国产天堂久久综合| 蜜桃麻豆www久久| 久久久老熟女一区二区三区| 欧美久久天天综合香蕉伊| 久久九九有精品国产23百花影院| 精品久久久久成人码免费动漫| 国产精品午夜久久| 国产精品9999久久久久| av色综合久久天堂av色综合在| 91精品国产高清久久久久久国产嫩草 | 狠狠色丁香婷婷久久综合不卡| 久久青青色综合| 久久强奷乱码老熟女网站| 香蕉久久夜色精品国产小说| 久久精品麻豆日日躁夜夜躁| 精品无码久久久久国产动漫3d| 欧美与黑人午夜性猛交久久久| 99久久精品国产综合一区 | 国产精品99久久久久久董美香| 久久久婷婷五月亚洲97号色| 亚洲精品国产美女久久久| 伊人久久大香线蕉AV色婷婷色| 亚洲国产小视频精品久久久三级 | 久久久99精品一区二区| 国产激情久久久久影院|