下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、delphi 對(duì) xml的支持-txmldocument 類(lèi) delphi7 支持對(duì) xml文檔的操作,可以通過(guò) txmldocument 類(lèi)來(lái)實(shí)現(xiàn)對(duì) xml文檔的讀寫(xiě)??梢岳?txmldocument 把 xml文檔讀到內(nèi)存中,從而可以進(jìn)行編輯、保存操作。 txmldocument類(lèi)是通過(guò) dom( 文檔對(duì)象模型)接口來(lái)訪問(wèn)xml 文檔中的各個(gè)元素的。 對(duì)于 dom 接口的實(shí)現(xiàn)有多種方式,delphi支持的方式有: 1) 微軟的 msxml sdk,這種方式是通過(guò)com 對(duì)象來(lái)實(shí)現(xiàn); 2) apache 的 xerces 的實(shí)現(xiàn)方式; 3) 開(kāi)源 openxml 實(shí)現(xiàn)方式。 對(duì)于不同的接口
2、實(shí)現(xiàn)方式可以通過(guò)設(shè)定txmldocument 的 domvender 來(lái)進(jìn)行控制。 支持 xml 的 delphi 單元主要存在與 borlanddelphi7sourcexml目錄下,主要包括:xmlintf,xmldoc,xmldom ,msxmldom,xercesxmldom ,xdom ,oxmldom等單元: xmlintf 包括了 borland 自己定義的 xml文檔的接口; xmldoc 是對(duì) xmlintf 中所定義接口的 borland 實(shí)現(xiàn); xmldom 定義了 dom(文檔對(duì)象模型)接口,這里對(duì)dom 接口進(jìn)行了 borland 的實(shí)現(xiàn);msxmldom 實(shí)現(xiàn)微軟對(duì)
3、 xmldom中定義的接口的實(shí)現(xiàn),主要調(diào)用微軟的com 對(duì)象來(lái)實(shí)現(xiàn), 對(duì) xmldom中定義接口的封裝; xercesxmldom borland 通過(guò) xerces xml dom 方式來(lái)實(shí)現(xiàn)對(duì) xmldom中定義接口的封裝; oxmldom borland 通過(guò)使用 openxml 來(lái)實(shí)現(xiàn)對(duì) xmldom中定義接口的封裝; txmldocument 類(lèi)的屬性,請(qǐng)參考borland 的幫助文件; 讀取 xml文檔 通常情況下不通過(guò)直接使用txmldocument 對(duì)象來(lái)進(jìn)行 xml 文件的讀取,而是使用xmldoc單元中提供的幾個(gè)有用的函數(shù)來(lái)讀取xml文檔,這些函數(shù)包括: function
4、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; 可以看出這些函數(shù)全部返回的是ixmldocument接口,得到了 ixm
5、ldocument接口在進(jìn)行文檔的操作;這些函數(shù)都是通過(guò)創(chuàng)建txmldocument對(duì)象來(lái)實(shí)現(xiàn)對(duì)xml文檔的讀取的;其中newxmldocument僅僅創(chuàng)建一個(gè) ixmldocument 接口。 可以這樣利用 newxmldocument來(lái)讀取 xml 文檔: xmldoc := newxmldocument; xmldoc.loadfromfile(filename); 保存 xml文檔 可以通過(guò)下面的方式來(lái)保存xml 文檔: xmldoc := newxmldocument; iroot := ixmldoc.createnode( testxmldocument ); xmldoc.do
6、cumentelement := iroot; xmldoc.savetofile(filename); 選用不同類(lèi)型的xml 解析方式 上面已經(jīng)提到有三種方式實(shí)現(xiàn)dom,也就是可以應(yīng)用borland 提供的種不同的xml解析器來(lái)對(duì) xml文檔進(jìn)行解析; 三種解析器 、 微軟的解析器(msxml sdk) 微軟解析器主要應(yīng)用在windows中,在安裝 msxml sdk 的時(shí)候會(huì)安裝解析器,同時(shí)ie 瀏覽器也提供了解析器,這個(gè)解析器是一個(gè)com。 、 apache的 xerces 解析器 borland 自己實(shí)現(xiàn)了一個(gè) xerces 解析器,這個(gè)可以通過(guò)調(diào)用xercesxmldom.dll模塊
7、來(lái)實(shí)現(xiàn) ; 如 果 使 用 這 個(gè) 解 析 器 可 能 需 要 同 應(yīng) 用 程 序 一 起 進(jìn) 行 分 發(fā) xercesxmldom.dll,xerceslib.dll,cc3260mt.dll三個(gè) dll文件 、 openxml 解析器 這個(gè)解析器的源代碼存在于xdom.pas單元中,這個(gè)可以通過(guò)http:/www.philo.de/xml/進(jìn)行跟新下載,這個(gè)是一個(gè)德國(guó)人寫(xiě)的xml解析器; 三種解析器比較如下: 、微軟的解析器 微軟的解析器當(dāng)然好了,但是也不能排除存在的意外情況,在我個(gè)人的經(jīng)驗(yàn)中,至少我們公司對(duì)于 xml解析的方式,只有在ie6.0 以上的版本才能夠正常的工作; 至于,bor
8、land同樣是通過(guò)引入 msxml.dll 的接口來(lái)實(shí)現(xiàn)的,所以可以推理出,同樣存在同樣的問(wèn)題;這個(gè)通過(guò)研究tmsdomimplementation(msxmldom 單元中)的實(shí)現(xiàn)方式可以得到證明,實(shí)現(xiàn)的過(guò)程中通過(guò)調(diào)用cocreateinstance函數(shù)接口來(lái)實(shí)現(xiàn)解析的; 在發(fā)布解析 xml的代碼的時(shí)候可能就會(huì)存在由于ie 的本版的不同,需要把ie6.0 一同發(fā)布,比較麻煩; 、borland 的 xerces 解析器 這種方式的解析器是通過(guò) loadlibrary(pchar(libname); 函數(shù),libname的內(nèi)容是xercesxmldom.dll (windows 平臺(tái)) ,li
9、bxercesxmldom.so.1 (linux平臺(tái)) 。那么就需要隨同應(yīng)用程序一起發(fā)布的dll, 就包括了 xercesxmldom.dll ,xerceslib.dll,cc3260mt.dll; 這個(gè)發(fā)布相對(duì)于發(fā)布不同版本的ie6.0 來(lái)說(shuō)要相對(duì)簡(jiǎn)單一些; 、openxml 解析器 由于存在 xdom.pas 單元,這個(gè)單元中包含了完全的xml解析的源代碼,那么應(yīng)用這種方式,可以避免軟件發(fā)布的種種問(wèn)題,這是由于解析的代碼被靜態(tài)編譯在應(yīng)用程序內(nèi)部。唯一不好的地方就是應(yīng)用程序的體積可能要大一些; 如何使用不同的解析器 我們可以寫(xiě)一個(gè)函數(shù)來(lái)使用不同的解析器; function newdiff
10、xmldocument(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
11、提供的三種方式進(jìn)行解析的話,分別取值是: microsoft 存在于 msxmldom.pas單元中的 smsxml 常量; xerces 存在于 xercesxmldom .pas 單元中的 sxercesxml常量; openxml 存在于 oxmldom.pas 單元中的 sopenxml 常量; 這個(gè)是由于在 msxmldom,xercesxmldom ,oxmldom三個(gè)單元的 initailization部分,都通過(guò)調(diào)用 registerdomvendor函數(shù),注冊(cè)了不同的解析器接口; 當(dāng)然,borland同樣提供了一種可以靈活進(jìn)行擴(kuò)展的機(jī)制來(lái)擴(kuò)展用戶自己的解析器,這個(gè)需要繼承,tdomvendor 類(lèi)(存在于 xmldom單元中)。實(shí)際上,borland自己就是通過(guò)這種方式來(lái)實(shí)現(xiàn)不同方式解析器的;具體的實(shí)現(xiàn)過(guò)程可以通過(guò)參考o(jì)xmld
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 精細(xì)保潔收納培訓(xùn)課件
- 有效溝通培訓(xùn)
- 2024年擺攤雨蓬轉(zhuǎn)讓合同范本
- 簽訂承諾防詐騙協(xié)議書(shū)范文模板
- 房車(chē)改裝合伙人協(xié)議書(shū)范文模板
- 中年人離婚協(xié)議書(shū)范文2024標(biāo)準(zhǔn)版
- 互聯(lián)網(wǎng)金融風(fēng)險(xiǎn)應(yīng)急預(yù)案
- 環(huán)保行業(yè)消防安全檢測(cè)服務(wù)方案
- 安全文明專(zhuān)題
- 新入員工安全培訓(xùn)試題附答案(精練)
- 2022年江蘇省沿海開(kāi)發(fā)集團(tuán)有限公司校園招聘筆試模擬試題及答案解析
- 利潤(rùn)及利潤(rùn)分配表(通用模板)
- 大象版2022-2023五年級(jí)科學(xué)上冊(cè)《3-4我是小小安全員》課件
- 靜脈炎相關(guān)知識(shí)課件
- 烯烴分離裝置操作規(guī)程
- 雨污水管網(wǎng)施工要點(diǎn)及質(zhì)量驗(yàn)收要求
- DB33∕T 1231-2020 人防門(mén)安裝技術(shù)規(guī)程
- 發(fā)揮產(chǎn)業(yè)工會(huì)作用的實(shí)施方案
- 科捷物流介紹(中文版)ppt課件
- 軍事地形學(xué)地形圖基本知識(shí)
- 2022版義務(wù)教育(生物學(xué))課程標(biāo)準(zhǔn)(含2022年修訂和新增部分)
評(píng)論
0/150
提交評(píng)論