奇领yy6608在线观看官网

  • <acronym id="y46sa"></acronym>
  • <kbd id="y46sa"></kbd>
  • 空間訪問權限:游客, 頭像訪問權限:自己
    [登錄]后可以瀏覽更多信息
    博客正文
    【操作】
    Delphi操作xml
    作者思路清晰,行文流暢。

    https://www.cnblogs.com/qingsong/articles/2630376.html

    一、Delphi 對XML的支持---TXMLDocument類

           Delphi7 支持對XML文檔的操作,可以通過TXMLDocument類來實現對XML文檔的讀寫?梢岳肨XMLDocument把XML文檔讀到內存中,從而可以進行編輯、保存操作。TXMLDocument類是通過DOM(文檔對象模型)接口來訪問XML文檔中的各個元素的。對于DOM接口的實現有多種方式,Delphi支持的方式有:1)微軟的MSXML SDK,這種方式是通過COM對象來實現;2) Apache 的Xerces的實現方式;3)另外一種是開源OpenXML實現方式。對于不同的接口實現方式可以通過設定TXMLDocument的DOMVender來進行控制。

         支持XML的Delphi單元主要存在與…\Borland\Delphi7\Source\Xml目錄下,主要包括:XMLIntf,XMLDoc,xmldom,msxmldom,xercesxmldom,xdom,oxmldom等單元。
    • XMLIntf――包括了Borland自己定義的XML文檔的接口;
    • XMLDoc――是對XMLIntf中所定義接口的Borland實現;
    • Xmldom――定義了DOM(文檔對象模型)接口,這里對DOM接口進行了Borland的實現;
    • Msxmldom――實現微軟對Xmldom中定義的接口的實現,主要調用微軟的COM對象來實現,對Xmldom中定義接口的封裝;
    • Xercesxmldom――Borland通過Xerces XML DOM方式來實現對Xmldom中定義接口的封裝;
    • Oxmldom――Borland通過使用OpenXML來實現對Xmldom中定義接口的封裝;

    TXMLDocument類的屬性,請參考Borland的幫助文件;

    二、讀寫XML文檔
      1、讀取XML文檔

    通常情況下不通過直接使用TXMLDocument對象來進行XML文件的讀取,而是使用XMLDoc單元中提供的幾個有用的函數來讀取XML文檔,這些函數包括:

    function LoadXMLDocument(const FileName: DOMString): IXMLDocument;
    function LoadXMLData(const XMLData: DOMString): IXMLDocument; overload;
    function LoadXMLData(const XMLData: string): IXMLDocument; overload;
    function NewXMLDocument(Version: DOMString = '1.0'): IXMLDocument;

    可以看出這些函數全部返回的是IXMLDocument接口,得到了IXMLDocument接口在進行文檔的操作;

    這些函數都是通過創建TXMLDocument對象來實現對XML文檔的讀取的;其中NewXMLDocument僅僅創建一個IXMLDocument接口。

    可以這樣利用NewXMLDocument來讀取XML文檔:
        XMLDoc := NewXMLDocument;
        XMLDoc.LoadFromFile(FileName);

        2、保存XML文檔

    可以通過下面的方式來保存XML文檔:
     
               XMLDoc := NewXMLDocument;
               iRoot := IXMLDoc.CreateNode('TestXMLDocument');
               XMLDoc.DocumentElement := iRoot;

               …

               XMLDoc.SaveToFile(FileName);
           

           可以看出通過接口來操作XML文檔是非常方便的;

    三、選用不同類型的XML解析方式
           上面已經提到有三種方式實現DOM,也就是可以應用Borland提供的3種不同的XML解析器來對XML文檔進行解析;

       1、 三種解析器
    • 微軟的解析器(MSXML SDK):微軟解析器主要應用在Windows中,在安裝MSXML SDK的時候會安裝解析器,同時IE瀏覽器也提供了解析器,這個解析器是一個COM。
    • Apache的Xerces解析器: Borland自己實現了一個Xerces解析器,這個可以通過調用xercesxmldom.dll模塊來實現;如果使用這個解析器可能需要同應用程序一起進行分發xercesxmldom.dll,XercesLib.dll,CC3260MT.DLL三個DLL文件
    • OpenXML解析器:這個解析器的源代碼存在于xdom.pas單元中,這個可以通過http://www.philo.de/xml/進行跟新下載,這個是一個德國人寫的XML解析器;

       2、使用不同解析器的比較

        對于三種方式的解析器比較如下:

        1)微軟的解析器

    微軟的解析器當然好了,但是也不能排除存在的意外情況,在我個人的經驗中,至少我們公司對于XML解析的方式,只有在IE6.0以上的版本才能夠正常的工作;

    至于,Borland同樣是通過引入MSXML.DLL的接口來實現的,所以可以推理出,同樣存在同樣的問題;這個通過研究TMSDOMImplementation(msxmldom單元中)的實現方式可以得到證明,實現的過程中通過調用CoCreateInstance函數接口來實現解析的;

    在發布解析XML的代碼的時候可能就會存在由于IE的本版的不同,需要把IE6.0一同發布,比較麻煩;

       2)Borland的Xerces解析器
    這種方式的解析器是通過 LoadLibrary(PChar(LibName));函數,LibName的內容是xercesxmldom.dll(Windows平臺),libxercesxmldom.so.1(Linux平臺)。那么就需要隨同應用程序一起發布的Dll,就包括了xercesxmldom.dll,XercesLib.dll,CC3260MT.DLL;

    這個發布相對于發布不同版本的IE6.0來說要相對簡單一些;

       3)OpenXML解析器
    由于存在xdom.pas單元,這個單元中包含了完全的XML解析的源代碼,那么應用這種方式,可以避免軟件發布的種種問題,這是由于解析的代碼被靜態編譯在應用程序內部。唯一不好的地方就是應用程序的體積可能要大一些;

        3、如何使用不同的解析器

    我們可以寫一個函數來使用不同的解析器;

    function NewDiffXmlDocument(DOMVender:string; Version:DOMString='1.0'):IXMLDocument;
    var
      XMLDoc : TXMLDocument;

    begin
      XMLDoc := TXMLDocument.Create(nil);
      XMLDoc.DOMVendor := GetDOMVendor(DOMVender);
      Result := XMLDoc;
      Result.Active := True;
      if Version <> '' then  Result.Version := Version;
    end;

     
    其中DOMVender如果用Borland提供的三種方式進行解析的話,分別取值是:

           Microsoft――存在于msxmldom.pas單元中的SMSXML常量;
           Xerces――存在于xercesxmldom .pas單元中的SXercesXML常量;
           OpenXML――存在于oxmldom.pas單元中的SOpenXML常量;

     這個是由于在msxmldom,xercesxmldom,oxmldom三個單元的initailization部分,都通過調用RegisterDOMVendor函數,注冊了不同的解析器接口;

    當然,Borland同樣提供了一種可以靈活進行擴展的機制來擴展用戶自己的解析器,這個需要繼承,TDOMVendor類(存在于xmldom單元中)。實際上,Borland自己就是通過這種方式來實現不同方式解析器的;具體的實現過程可以通過參考oxmldom單元中對xdom的封裝;


    四、結論
        Delphi作為一個成功的開發工具,它自身實現的對XML的支持,肯定比網絡上某些實現要穩定、高效的多,我們沒有必要再進行另外的封裝什么MSXML.DLL的COM接口。當然,可以自己實現不同的XML解析器,也可以應用已經存在的解析器。同時,可以看出Delphi對于XML的支持也是非常完善的。  
    欄目劃分
    WEB應用程序 (33)
    桌面應用程序 (10)
    Windows操作系統 (12)
    xNix操作系統 (5)
    數據庫技術 (3)
    多媒體技術 (1)
    硬件技術 (4)
    辦公軟件 (2)
    以史為鑒 (2)
    教學反思1 (2)
    奇聞趣事 (5)
    其它 (11)
    教學反思 (4)
    電子技術 (2)
    中學生科技 (3)
     
    主人推薦
    音象定位和音箱喇叭的排步
    我國高層意向已定:制造大飛機
    “運十”悲劇
    日爾曼人
    細說百越族
    宇宙深處的秘密——星云
    [強烈推薦]中華56民族FLASH完整珍藏版
    一組漂亮的植物
      
    奇领yy6608在线观看
    友情链接:dafa888手机典版网页登录 白小姐四肖必选期期中