• <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 閱讀(1490) 評論(0)  編輯 收藏 引用

            狠狠色丁香久久婷婷综| 国产精品午夜久久| 亚洲欧美成人综合久久久| 婷婷综合久久中文字幕蜜桃三电影| 日日躁夜夜躁狠狠久久AV| 婷婷久久综合九色综合98| 久久精品国产精品亚洲| 亚洲人成网亚洲欧洲无码久久| 久久国产精品久久久| 伊人色综合久久天天网| 久久99国内精品自在现线| 久久久久亚洲av成人无码电影 | 亚洲va久久久噜噜噜久久狠狠| 久久精品亚洲精品国产色婷| 久久久久亚洲精品中文字幕| 国产国产成人精品久久| 少妇熟女久久综合网色欲| 青青草原综合久久大伊人精品| 精品综合久久久久久97| 激情久久久久久久久久| 国产精品天天影视久久综合网| 亚洲色欲久久久综合网东京热| 日本亚洲色大成网站WWW久久| 热久久国产精品| 久久AV高清无码| 色婷婷综合久久久中文字幕| 奇米影视7777久久精品人人爽 | 久久人人爽人人爽人人片AV东京热 | 久久久网中文字幕| 久久精品三级视频| 久久精品国产72国产精福利| 成人精品一区二区久久久| 久久99国产综合精品免费| 色综合久久中文字幕无码| 久久WWW免费人成一看片| 波多野结衣久久精品| 99久久做夜夜爱天天做精品| 亚洲国产日韩欧美综合久久| 伊人久久五月天| 久久人妻少妇嫩草AV无码专区| 国内精品久久久久影院优|