作者: cactus123456
標題: delphi操作xml學(xué)習筆記 之二 簡(jiǎn)單讀寫(xiě)
關(guān)鍵字: xml 簡(jiǎn)單讀寫(xiě) dom
分類(lèi): 個(gè)人專(zhuān)區
密級: 公開(kāi)
XML的二十個(gè)熱點(diǎn)問(wèn)題
翻譯:Chen Zhihong
這些日子,幾乎每個(gè)人都在談?wù)揦ML (Extensible Markup Language),但是很少有人真正理解其含義。XML的推崇者認為它能夠解決所有HTML不能解決的問(wèn)題,讓數據在不同的操作系統或應用之間進(jìn)行靈活交換。確實(shí),所有的觀(guān)察家們都同意XML將引發(fā)一場(chǎng)內容發(fā)布和知識交換的革命。誰(shuí)先進(jìn)入這個(gè)領(lǐng)域,誰(shuí)就能夠大獲其利。
這里的20個(gè)有關(guān)XML的熱門(mén)問(wèn)題能夠讓你成為一XML“專(zhuān)家”,或至少讓你能夠在今后看準XML的發(fā)展方向。
1 什么是XML? 11 OSD和CDF與XML的關(guān)系如何?
2 XML何以重要? 12 電子商務(wù)(e-commerce)和XML?
3 SGML、HTML和XML有什么聯(lián)系? 13 XML中的層疊樣式?
4 如何實(shí)現XML? 14 XML如何改進(jìn)超鏈接?
5 什么是文件類(lèi)型定義(DTD)? 15 服務(wù)器上支持XML嗎?
6 什么是格式完整和有效的文件? 16 誰(shuí)應該學(xué)習XML?
7 如何在瀏覽器中閱讀XML? 17 有哪些編寫(xiě)XML的工具可供我使用?
8 RDF和XML有何聯(lián)系? 18 XML的國際化?
9 Netscape瀏覽器中如何實(shí)現XML? 19 XML的未來(lái)在哪里?
10 Microsoft瀏覽器中如何實(shí)現XML? 20 哪里能學(xué)到更多的XML知識?
1.什么是XML?
XML代表擴展標識語(yǔ)言(Extensible Markup Language). 由萬(wàn)維網(wǎng)聯(lián)盟(W3C)帶頭, XML在1998年2月10日成為正式的規范.
XML開(kāi)發(fā)者會(huì )告訴你XML不是一種語(yǔ)言,而是一個(gè)定義其他語(yǔ)言的系統. 你可能已經(jīng)聽(tīng)說(shuō)過(guò), 或使用過(guò)這些語(yǔ)言中的一種,--如Microsoft支持"推技術(shù)"的 Channel Definition format(CDF).
正從事于XML相關(guān)建議工作的W3C, 稱(chēng)XML為"表達數據中結構 的共同語(yǔ)法". 結構化的數據指的是其內容,意義或應用被標記的數據. 例如, HTML中<H1>標記指定文本為某一字體和大小, XML的標記將明確確定信息的種類(lèi): <BYLINE>標記可以識別文檔的作者, <PRICE>標記可以在一個(gè)存貨清單中包含某一項目的成本 .
通過(guò)將結構,內容和表現分離, 同一個(gè)XML源文檔只寫(xiě)一次, 可以用不同的方法表現出來(lái): 在計算機屏幕上, 在手提電話(huà)顯示屏上, 在為盲人服務(wù)的設備上翻譯成語(yǔ)音, 等等. 它可以在可能開(kāi)發(fā)的任何通訊產(chǎn)品上工作. 一個(gè)XML文檔因此可以比其書(shū)寫(xiě)時(shí)的作者和顯示技術(shù)生存得更久.
所以, XML將不僅限于Internet, 例如, 可以服務(wù)于整個(gè)出版業(yè), 特別是對于想制作可出現在多種媒體上的文檔的人. 一些使用Standard Generalized Markup Language (SGML)多年的大型文檔出版商將轉向XML. 還有, 獨立于平臺的XML是為Web開(kāi)發(fā)的, 這是它將最具影響的地方.
XML在Web的真正實(shí)力在于它是如何與文檔對象模型(Document Object Model,DOM)交互的. DOM定義了訪(fǎng)問(wèn)XML文檔數據的接口.
程序員利用DOM可以用標準的方法編寫(xiě)動(dòng)態(tài)的內容. 換句話(huà)說(shuō), 他們可以使用它來(lái)使瀏覽器文檔樹(shù)中的一部分特定內容按照一定的方式表現, 例如, 當用戶(hù)將鼠標移至文字上時(shí), 這些文字變成藍色. Netscape Navigator 和 Microsoft Internet Explorer瀏覽器都有各自的DOM, 但是他們都稱(chēng)將在其下一版本的瀏覽器中支持W3C 的標準DOM.
2.XML何以重要?
Web領(lǐng)袖之間的說(shuō)法是內容至上.可是不幸地是:內容經(jīng)常和其表現緊密結合.請問(wèn)你多少次在網(wǎng)頁(yè)中遇到一個(gè)小小的提示:"最好在800x600像素的分辨率上顯示"?
XML將幫助解決以上問(wèn)題, 因為網(wǎng)站建設者不用再指明在哪里顯示什么, 而是指明文檔 的結構. 例如, 你可以說(shuō)明文檔的標題, 作者, 關(guān)聯(lián)文檔的清單, 等等. 然后, 任何一個(gè)有XML瀏覽器的設備都可以給出最適合它的文檔版本, 這樣的設備可以是一個(gè)掌上型計算機, 置頂盒, 或高速的工作站.
但是, 也許XML的最佳特性是其內在的可擴展性. 公司和組織能夠擴展XML來(lái)滿(mǎn)足新的挑戰和應用. 一個(gè)基于XML的語(yǔ)言已經(jīng)在使用--微軟的Channel Definition format (CDF)-- 還有更多將出現, 包括 Resource Definition format (RDF) 和 Open Software Description (OSD).
XML 也允諾成為交換數據 和文檔的標準機制. 例如, XML可能成為不同廠(chǎng)商的數據庫在Internet上交換信息的一種方法.現在準確地決定XML的方向還有一些早. 但是, 其各種可能性是令人敬畏的,這就是為什么圍繞著(zhù)XML有如此多的激動(dòng)的一個(gè)重要原因.
3.SGML、HTML和XML有什么聯(lián)系?
SGML是在文字處理應用中表達數據的一個(gè)方法. 它已經(jīng)出現十多年了, XML和HTML都是從SGML 發(fā)展而來(lái)的文檔形式. 因此, 它們都有一些共同點(diǎn), 如相似的語(yǔ)法和標記的使用.但是HTML是SGML的一個(gè)應用, 而XML是SGML的一個(gè)子集. 區別是重要的. 基本上HTML不能用來(lái)定義新的應用, 而XML可以. 例如,RDF和CDF都是使用XML定義的應用. XML和HTML更象表兄弟, 而不是親兄弟. 事實(shí)上, XML和SGML是兼容的 -- XML文檔可以通過(guò)任何SGML制作或瀏覽工具閱讀. 但是, XML沒(méi)有SGML那么復雜, 它是設計用于有限帶寬的網(wǎng)絡(luò )的, 如Internet. XML規范的合作者Tim Bray說(shuō), XML的設計出發(fā)點(diǎn)是取SGML的優(yōu)點(diǎn), 去除復雜的部分, 使其保持輕巧, 可以在Web上工作.
HTML,SGML和XML將繼續用于其合適的地方, 它們中的任何一個(gè)不會(huì )使其他一個(gè)廢棄. HTML仍是在Web上快速出版數據的最簡(jiǎn)單的方法, 大部分短期的數據, 如會(huì )議議程或廣告宣傳冊. 如果數據會(huì )長(cháng)期使用, 并且需要更多的一些結構, Web建造者將愿意使用XML. 不同于HTML和XML, SGML可能永遠不會(huì )在Internet上被廣泛接受, 因為它從來(lái)沒(méi)有為某個(gè)網(wǎng)絡(luò )協(xié)議的需求而設計或優(yōu)化過(guò). 對于高端的, 復雜結構的出版應用, SGML將繼續適用.
4.如何實(shí)現XML?
XML將以幾個(gè)不同的方式應用. 一個(gè)是在人機之間交換數據, 如從Web服務(wù)器至用戶(hù)的瀏覽器. 另外一個(gè)是在不同的應用之間交換數據, 或者是機器之間交換數據.
在這些情況下, 你都可能需要三層架構: 后端數據庫, 針對數據的處理邏輯的中間層服務(wù)器, 以及數據進(jìn)一步顯示和處理的客戶(hù)端. 數據庫可以從多個(gè)數據來(lái)源接收信息, 可能已經(jīng)是XML格式的數據. 中間層然后收集數據并在最終的表現層上輸出和表現..
現在, 網(wǎng)頁(yè)有時(shí)候以這種方法傳送 --CNET的NEWS.COM從一個(gè)數據庫中發(fā)表數據.但是要獲得一頁(yè)的新的視圖,如NEWS.COM的新的“打印機友好”選項, 服務(wù)器必須產(chǎn)生一個(gè)新的頁(yè)面. 一份適當格式化的XML文檔將允許客戶(hù)端的應用為不同的媒體修改文檔的表現形式, 比如為打印機.
5.什么是DTD?
文檔類(lèi)型定義(DTD)是一套關(guān)于標記符的語(yǔ)法規則.它告訴你可以在文檔中使用哪些標記符,它們應該按什么次序出現,哪些標記符可以出現于其它標記符中,哪些標記符有屬性,等等.DTD原來(lái)是為使用SGML開(kāi)發(fā)的, 它可以是XML文檔的一部分, 但是它通常是一份單獨的文檔或者一系列文檔 因為XML本身不是一種語(yǔ)言,而是定義語(yǔ)言的一個(gè)系統,它沒(méi)有象HTML一樣擁有一個(gè)通用的DTD.相反, 想使用XML進(jìn)行數據交換的工業(yè)或組織可以定義它們自己的DTD. 如果一個(gè)組織想用XML來(lái)標識僅在內部使用的文檔, 它可以創(chuàng )造自己私有的DTD. 比如 華爾街雜志交互版本擁有一個(gè) DTD 來(lái)詳細說(shuō)明每一版, 其中有關(guān)于頁(yè), 文章, 概要, 標題下署名等等的信息.刊物目前使用SGML DTD,但是它也正在開(kāi)發(fā)一個(gè)XML版本. 關(guān)于DTD并不是沒(méi)有爭議的. 一些人感到它給商業(yè)業(yè)務(wù)增加了實(shí)實(shí)在在的價(jià)值, 而一些人感覺(jué)它限制了創(chuàng )造性. 還有一些人認為DTD有用, 但是還做得不夠. 微軟正嘗試用它的XML數據提議來(lái)解決上一個(gè)抱怨, 但是批評者說(shuō)這些改進(jìn)應該在DTD規范本身進(jìn)行.
一些供應商, 包括微軟, 已經(jīng)提議了替代DTD的一個(gè)方法, 稱(chēng)為schema. 他們已經(jīng)將其以XML數據提交給了W3C. 就象DTD, Schema提供了文檔的規則, 并指出用什么標記符, 標記符的屬性, 之間的聯(lián)系, 等等.但是,不同于DTD, schema可以定義數據類(lèi)型. 例如, DTD可能有一個(gè)標記符 <PRICE>, 而標記符之間的內容可以是數字或字符串. Schema 可以規定只輸入數字.這個(gè)方法顯然有其優(yōu)點(diǎn), 特別是用于應用,對象,或數據庫之間的數據傳輸. 唯一的問(wèn)題是它將成為DTD規范, 還是XML的一個(gè)擴展.
6.什么是結構良好和有效的文件?
基本上有兩類(lèi)相關(guān)的XML文檔: 結構良好的和有效的. 結構良好的 XML文檔遵守XML語(yǔ)法的一般規則, 這些規則比HTML和SGML的更為嚴格. XML的字符數據決不會(huì )吊在那里, 沒(méi)有某種結束標識符, 或者是象<MYTAG></MYTAG> 成對出現的 結束標識符, 或者是一個(gè)特別的在右尖括弧前帶有一個(gè)斜杠的 空元素 標記, 比如 <MYTAG/>; XML 標識總是以左尖括弧或 & 開(kāi)始; 元素類(lèi)型和屬性名稱(chēng)是大小寫(xiě)區分的; 屬性需要引號; 等等.
有效的 XML 文檔遵守某個(gè)特定的DTD.確認XML文檔正確性的工作主要由制作出版工具承擔, 而XML瀏覽器為讀取XML文檔, 只需要檢查其構造的良好性. 這樣, 制作工具中的解析器得要檢查構造良好性 和 有效性, 而瀏覽器僅要考慮尋找已經(jīng)構造良好的XML.
7 如何在瀏覽器中閱讀XML?
閱讀XML文檔的工具一般稱(chēng)為XML解析器, 雖然其更正式的名稱(chēng)是XML處理器. XML處理器將數據傳送到應用軟件, 以做制作, 出版, 查詢(xún), 或顯示. XML不給應用軟件提供 應用程序接口 (API), 它只是把數據傳給應用軟件. XML處理器不解析非結構良好的數據. Netscape 和 Microsoft 都已經(jīng)將XML解析器包含在其瀏覽器中, 或正計劃將其包含到瀏覽器中.
XML開(kāi)發(fā)者團體提供免費的XML閱讀器和解析器, 來(lái)應用到應用軟件或XML制作軟件:
Textuality的 Lark, 來(lái)自XML標準的作者之一.
Microstar的 AElfred, 一個(gè)基于Java的解析器.
DataChannel的 DXP, 前身為著(zhù)名的NXP, 或已經(jīng)增加了API的Norbert的 (Mikula) XML 解析器.
8 RDF和XML有何聯(lián)系?
如果XML提供了表達語(yǔ)言的能力,那么XML應用則是特定的語(yǔ)言.資源描述框架(Resource Description Framework,RDF) 是這樣的一個(gè)應用軟件:使用XML的語(yǔ)法進(jìn)行數據建模.
RDF是一種描述和訪(fǎng)問(wèn)數據方法. 這意味著(zhù)RDF是關(guān)于數據的數據, 或者說(shuō)元數據. 在Web中, 這些元數據將被用于建立標準的站點(diǎn)地圖, 更精確的搜索結果, 和分層次的主題索引. RDF也允許智能書(shū)簽, 當被索引的網(wǎng)頁(yè)變化時(shí), 書(shū)簽隨之發(fā)生變化. 如果你跟蹤內容定期更新的站點(diǎn), 比如CNET的 NEWS.COM, 將很有用.對于網(wǎng)站建設者,建立可被搜索引擎引用的其網(wǎng)站內容的元數據并不困難. 我們很快就會(huì )有商業(yè)化的軟件, 來(lái)自動(dòng)產(chǎn)生給定站點(diǎn)的RDF文件.
XML元數據也將活躍數據描述和評估的市場(chǎng). 有許多評級機構在網(wǎng)上出現, 他們評估一切數據, 從保護孩子安全的站點(diǎn)到最佳電影或葡萄酒站點(diǎn). RDF可以使用的等級的語(yǔ)法來(lái)描述評級機構.人們將選擇有他們感覺(jué)最合適的詞匯表的評級機構,詞匯表指的是評級機構給不同類(lèi)型內容評級使用的特別的一套術(shù)語(yǔ) -- 從性和暴力到葡萄酒酸度.
9 Netscape瀏覽器中如何實(shí)現XML?
Netscape將在Communicator/Navigator 5.0中以一個(gè)代號為Aurora的交付部件來(lái)支持XML元數據. Aurora利用RDF來(lái)獲得Netscape所稱(chēng)的"桌面信息全面集成."
Aurora在網(wǎng)絡(luò )、桌面和數據庫之間查找和管理信息.它將在桌面上以"窗口"菜單的界面出現,會(huì )聚指向當前項目, 研究主題或日?;顒?dòng)等資源的指針.RDF使Aurora的導航條指向不同數據類(lèi)型(文字處理文檔、表格數據、電子郵件消息、數據庫內容)的本地文件, 也指向Internet 或Intranet 服務(wù)器上的資源(搜索和查詢(xún)的結果、書(shū)簽鏈接等).
Netscape 5.0 版瀏覽器中提供了一個(gè)讀取RDF的XML解析器,在產(chǎn)品最終交付前會(huì )以beta版出現.除了該RDF的實(shí)現, Netscape正計劃將一個(gè)通用的XML解析器包含在瀏覽器中, 而其瀏覽器可以和其他的XML應用軟件一起工作, 比如化學(xué)標記語(yǔ)言(CML)和數學(xué)標記語(yǔ)言(MathML).
"我們要使Navigator成為一個(gè)XML平臺,"Netscape原理工程師R.V. Guha這樣說(shuō).Guha 原來(lái)開(kāi)發(fā)過(guò)MCF (Meta Content format), MCF 后來(lái)加入了RDF規范.
10 Microsoft瀏覽器中如何實(shí)現XML?
微軟的 Internet Explorer 4.0 是第一個(gè)實(shí)現XML的網(wǎng)絡(luò )瀏覽器. 微軟提供了一對XML處理器:瀏覽器所攜帶的用C++寫(xiě)的解析器, 和一個(gè)Web建造者可以從中下載和加入他們自己的應用程序的Java解析器的源代碼. Java解析器是一個(gè)有效的 解析器, 就是說(shuō)它根據一個(gè)DTD或Schema來(lái)進(jìn)行檢查.為了提高性能,瀏覽器所帶的C++版的解析器是一個(gè)非有效的解析器.
據微軟的產(chǎn)品經(jīng)理Steve Sklepowich稱(chēng), 這兩個(gè)解析器都是"通用的", 因為它們不依靠特定的XML應用, 如CDF.由于XML數據和其表現分離, 在一個(gè)瀏覽器本身實(shí)際顯示XML的能力需要樣式表,例如XSL.
同時(shí), 微軟使用了它所稱(chēng)的XML數據源對象(XML Data Source Object,XML DSO).它應用了動(dòng)態(tài)HTML的數據捆綁能力, 將一端的XML數據和另一端的HTML數據相鏈接.IE 4.0訪(fǎng)問(wèn)XML文檔,從中查詢(xún)數據, 然后作為HTML顯示出來(lái).
微軟也使用了 XML對象模型來(lái)讓開(kāi)發(fā)者與瀏覽器中的XML數據進(jìn)行交互. 它的實(shí)現是通過(guò)將HTML作為基于文檔對象模型(DOM)的對象顯現, 盡管HTML 和 DOM 并非直接兼容. DOM 讓腳本和程序訪(fǎng)問(wèn)結構化的XML數據.
Sklepowich說(shuō), 雖然目前在微軟, XML的重心在瀏覽器, XML將最終出現在"任何HTML已經(jīng)出現了的地方".Bill Gates 已經(jīng)公開(kāi)宣布微軟Office 未來(lái)的版本將支持 XML, 而且公司也計劃支持電子郵件包和制作XML工具的標準.
11 OSD和CDF與XML的關(guān)系如何?
CDF和OSD是微軟支持的兩個(gè)XML應用.通過(guò)其XML解析器,微軟的 Internet Explorer 4.0讀CDF文件來(lái)驅動(dòng)和控制推頻道所帶來(lái)的頁(yè).根據RDF所做的工作, CDF提議又遞交給W3C,以利用RDF的能力來(lái)顯示不同數據元素之間的聯(lián)系.
Open Software Description 是用于描述軟件部件的詞匯表, 帶有語(yǔ)法如從屬, 版本和平臺. OSD 描述如何表現一個(gè)部件的特性, 以及如何將該部件安裝到計算機上. 它可以用于下載一個(gè)完整的軟件包, 但是它主要設計用于不斷增加的更新. OSD 單獨工作或和CDF一起工作, 來(lái)定義應用頻道. OSD建議由微軟和Marimba領(lǐng)導的一組銷(xiāo)售商于1997年8月提供給W3C.
12 電子商務(wù)(e-commerce)和XML?
CommerceNet是著(zhù)名的非贏(yíng)利性網(wǎng)上商務(wù)協(xié)會(huì ),它擁有500多個(gè)成員.數年來(lái)CommerceNet努力幫助e-commerce 產(chǎn)品和系統一起工作. 其概念是允許信息在不同目錄之間, 從目錄到付款系統, 在付款系統之間交換. 已經(jīng)發(fā)現XML可以在兩個(gè)重要方面幫助實(shí)現以上概念: 內容定義和信息交換.
內容定義:CommerceNet 正在定義通用于多種商業(yè)事務(wù)的數據元素. 這個(gè)稱(chēng)作商務(wù)核心(Commerce Core)的東西將定義如何給諸如公司名稱(chēng)、地址、價(jià)格、條款和數量等事物作標識.
信息交換:開(kāi)放,基于文本的XML用于服務(wù)器之間交換事務(wù)信息很理想.CommerceNet 提議用基于XML的通用商務(wù)語(yǔ)言(Common Business Language,CBL)來(lái)描述產(chǎn)品和服務(wù)目錄軟件, 關(guān)于商業(yè)規則和系統的元數據, 以及表格和消息的軟件. 許多CBL 取自已經(jīng)存在的 Electronic Data Interchange (EDI) 辭典, EDI辭典識別公認的術(shù)語(yǔ), 如發(fā)票和采購訂單. 但是CBL超越EDI的商業(yè)-到-商業(yè)的重點(diǎn), 包含了零售事務(wù)和橫向的供應鏈 -- 從供應商到批發(fā)商到零售商.
這樣的一個(gè)CBL應用是為使目錄互用的產(chǎn)品信息互換( Product Information Exchange,PIX)規范. CommerceNet設計PIX, 以幫助供應商和他們的分銷(xiāo)商更容易地交換產(chǎn)品數據. 長(cháng)遠的目標是工業(yè)組織--而非 CommerceNet--來(lái)將CBL作為特定的DTD的一個(gè)共同基礎使用. 一些著(zhù)重于工業(yè)的初步嘗試已經(jīng)宣布了:
Internt開(kāi)放支付(OBI): 一個(gè)在Internet上進(jìn)行國際性的商業(yè)間購物的標準.OBI基于目前的Internet標準, 如SSL(安全性)、SET(信用卡交易)和X.509(數字認證). OBI的支持者有Commerce One、Connect、Intelisys、InterWorld、Microsoft、Netscape、Open Market、和Oracle.
開(kāi)放貿易協(xié)議(OTP): 一個(gè)在Web上向消費者售物的一致的, 可共同操作的環(huán)境. 規則將包括從如何降價(jià)促銷(xiāo), 付款選擇, 到產(chǎn)品運輸, 接收和問(wèn)題解決. OTP由MasterCard International, DigiCash, CyberCash, Hewlett-Packard, IBM, AT&T Universal Card, Netscape, Royal Bank of Canada, 和一些 其他金融機構和技術(shù)公司支持.
Internet內容交換標準(ICE): Vignette, Firefly Network, 和 一些其他公司--包括微軟--正在開(kāi)發(fā)一個(gè)叫作ICE的規范, 使能夠在站點(diǎn)之間交換在線(xiàn)資產(chǎn), 無(wú)論那是內容, 應用程序, 或是元數據. ICE將利用現有的標準, 包括 OPS/P3P (使個(gè)人數據可靠交換), CDF,OSD和RDF.
13 XML中的層疊樣式?
因為XML將內容和表現分離, Web建造者需要新的方法來(lái)控制設計, 顯示和輸出. style sheet 是問(wèn)題的答案. 目前, 有三種可用于XML的 樣式表:
Cascading style Sheets (CSS)
Extensible style Language (XSL)
Document style Semantics and Specification Language (DSSSL).
如果5.0版的瀏覽器支持XML, XML對現有的CSS標準的支持將會(huì )處理大部分基本的風(fēng)格和頁(yè)面問(wèn)題. 但是CSS對于專(zhuān)業(yè)出版商可能不夠強大. 所以, 另一端存在著(zhù)DSSSL, 一個(gè)在使用SGML的高端出版商中流行的ISO (國際標準組織)標準. 然而, DSSSL是復雜的, 它處理的打印文檔管理在Web上很少有用.
現在剩下了XSL,特別為XML而寫(xiě)的樣式表.XSL目前上交給了W3C作為一個(gè)建議標準,其中的XSL轉換部分(XSLT)已經(jīng)于1999年11月成為正式的規范. 它給了Web開(kāi)發(fā)者和用戶(hù)較HTML更多的表現靈活性. 例如, HTML的<H2>標識符在所有瀏覽器上的表現是基本一樣的, 但是XSL讓開(kāi)發(fā)者指定他們的頁(yè)面元素如何表現(盡管用戶(hù)可以在個(gè)人設置中重載它).
XSL較CSS更強大, 因為它使Web建造者創(chuàng )建可以動(dòng)態(tài)改變其表現的文檔. 例如, 你可以包含這樣的程序語(yǔ)句, "如果一個(gè)XML元素的屬性為數值10, 顯示為綠色, 否則為黑色." 或者你可以將"僅供內部使用"作為屬性給一個(gè)段落標上, 這樣它在某些情況下不會(huì )出現. XSL被設計用于腳本語(yǔ)言如javascript.
14 XML如何改進(jìn)超鏈接?
XML超鏈接比基本的HTML風(fēng)格的超鏈接多了一些新的特性, 包括無(wú)需手寫(xiě)許多javascript代碼就能創(chuàng )建"聰明的"鏈接. 而且在XML, 鏈接本身成為了對象, 可以象其他對象一樣被管理.原來(lái)的鏈接規范--XLL, 或XML鏈接語(yǔ)言--正被分為兩個(gè)不同的規范: XPointer 和 XLink.
XPointer: 在HTML, 要鏈接到一個(gè)頁(yè)面的中間, 頁(yè)面作者必須在那兒加上定位標識符. 使用XPointer, 你可以"取址到" (不是"連接到")其他人的文本的任何部分. 顯而易見(jiàn), 這樣將有助于工作于法律文件, 科學(xué)和學(xué)術(shù)論文, 甚至W3C規范!
XLink: 當用戶(hù)點(diǎn)擊一個(gè)HTML超鏈接時(shí), 當前的網(wǎng)頁(yè)被連接到的文件替代. XLink令Web建立者給鏈接增加行為. 例如, 現在, 你必須用一些javascript, 使在鏈接處彈出一個(gè)獨立的窗口, 但是XLink讓W(xué)eb建立者對鏈接進(jìn)行編碼來(lái)執行一系列動(dòng)作, 包括彈出一個(gè)鏈接選擇的菜單.
另一個(gè)應用可以是彈出一個(gè)對話(huà)框, 可能是一個(gè)提醒用戶(hù)它們正要更新數據庫的警告. 鏈接彈出菜單可能需要用戶(hù)點(diǎn)擊一個(gè)框來(lái)表示在進(jìn)一步處理前他們接受義務(wù). 現在, 實(shí)現這樣的功能要寫(xiě)許多的腳本代碼.
XML也讓W(xué)eb建立者創(chuàng )建類(lèi)似Web環(huán)工作的Extended Link, Web環(huán)是通過(guò)"下一個(gè)/前一個(gè)"行進(jìn)來(lái)導航的自己選擇出來(lái)的關(guān)于相同主題的網(wǎng)站組. 對于彈出菜單太長(cháng)的相關(guān)鏈接站點(diǎn)表, Web建立者可以創(chuàng )建一個(gè)鏈接表, 這個(gè)表在不同的站點(diǎn), 頁(yè)面時(shí)會(huì )有變化. 用戶(hù)可以點(diǎn)擊一個(gè)圖標來(lái)自動(dòng)轉移到環(huán)中的下一個(gè)成員. 現在這樣的功能需要 CGI scripts, 而Extended Links 提供了一個(gè)標準的, 非私有的建立資源間聯(lián)系的方法.
仍然有更多的問(wèn)題需要解決, 特別是在行為政策方面. 必須由一種方法來(lái)協(xié)調以下三方面的關(guān)系: 文檔作者對鏈接所建議的行為, 用戶(hù)所喜好的顯示鏈接信息的方式, 以及是否和何時(shí)忽視用戶(hù)的意愿的政策.
15 服務(wù)器上支持XML嗎?
XML被設計成供長(cháng)久使用的, 高價(jià)值的文檔的儲存格式. XML不是只讓你定義標識符, 它也允許你定義文檔的儲存結構. 一篇HTML文檔僅存在于一個(gè)文件中, 而一個(gè)XML文檔可以由存放在不同地點(diǎn)的多個(gè)文件(稱(chēng)為實(shí)體)組成. 這提出了作為文檔存儲庫的XML服務(wù)器的概念.
服務(wù)器軟件供應商已正在支持XML:
Enigma, Insight 4.0
這是一個(gè)提供給出版商處理大型文檔的專(zhuān)業(yè)電子出版軟件解決方案. 目前和Insight捆綁在一起的Enigma SGML/XML style Sheet Editor, 也可以作為一個(gè)獨立產(chǎn)品提供.
Hynet Technologies, Digital Library System
Digital Library System (DLS) 將文檔和文檔部件作為標準軟件對象進(jìn)行管理, 允許引入在A(yíng)dobe FrameMaker和Microsoft Word中創(chuàng )建的文檔, 或者SGML/XML文件.
Inso, DynaText Professional Publishing System
這是一個(gè)進(jìn)行索引, 搜索和制作腳本的軟件, 它可以工作于運行在Windows NT 3.51 或 4.0, 或 Sun Solaris 2.5上的Microsoft的 IIS和 Netscape的 Enterprise and FastTrack servers.
Open Market, Folio
Open Market的 Folio 4 信息管理和發(fā)送產(chǎn)品將XML文檔引入帶索引的數據庫, 以在IP網(wǎng)絡(luò )上傳遞內容, 或將內容送至CD-ROM. 在一月份, Open Market宣布增強對XML的支持, 允許文檔以它們的本身格式進(jìn)行索引和保證安全. 同時(shí), Folio產(chǎn)品也將可以和其它基于標準的制作, 解析和生成XML文檔的解決方案相互操作. 它的產(chǎn)品包括 Folio siteDirector (分發(fā)信息), Folio SecurePublish (事務(wù)管理軟件), 和 Folio Publisher (電子出版).
WebMethods, Web Automation Server
Web Automation Server 幫助公司將基于瀏覽器的應用軟件和其它應用軟件的數據相結合. 它是基于XML的服務(wù)器, 使用 WebMethods自己的在機器間進(jìn)行Web數據交換的WIDL (Web Interface Definition Language). (該公司已經(jīng)將WIDL作為標準提議上交給 World Wide Web Consortium.)
16 誰(shuí)應該學(xué)習XML?
所有的Web建立者需要足夠了解XML,以決定是否使用它.E-commerce站點(diǎn)和管理數據庫中大量文檔的站點(diǎn)是顯然的首選對象.經(jīng)理可能不需要學(xué)習XML語(yǔ)法或如何建立DTD,他們仍要理解XML的潛力并加以利用.如果最終的目的只是讓人來(lái)讀信息, HTML能足夠滿(mǎn)足標識信息的要求. 但是如果你想要為自動(dòng)處理數據作準備, 你必須考慮將XML納入你的出版系統. 并非每一個(gè)工作在Web站點(diǎn)的HTML制作者必須成為XML制作者, 但是某些員工應該精通于XML--特別當站點(diǎn)的工作對象是值得為將來(lái)使用而管理的數據和文檔時(shí).當然,XML的功能也意味著(zhù)復雜性--一些Web建立者已經(jīng)發(fā)現他們可以在幾天內掌握HTML的基礎, 而他們可能需要花幾個(gè)星期來(lái)適應XML.只有你自己才能決定是否值得花這些時(shí)間.
17 有哪些編寫(xiě)XML的工具可供我使用?
幸運的是, Web建立者不用完全靠他們自己從頭開(kāi)始創(chuàng )建XML了. 市場(chǎng)上已經(jīng)有了創(chuàng )建, 管理和發(fā)送XML的工具, 并且一些公司也在進(jìn)行開(kāi)發(fā).
Adobe: 在1998年中期, Adobe將介紹可以輸出到XML的 FrameMaker 和 FrameMaker+SGML 的過(guò)渡版本. 這些產(chǎn)品的完整版本將能夠輸入XML. Adobe有 一名代表在 W3C的XML工作組, Adobe也參與了XLink, Cascading style Sheets和 RDF的工作, 所以我們可以期待這些技術(shù)將在A(yíng)dobe未來(lái)的產(chǎn)品中出現.
Allaire: HomeSite 4.0 和 Cold Fusion 4.0 都預計在今年夏天出品, 它們將支持XML, 包括style sheets. HomeSite 3.0中已經(jīng)提供了一個(gè)CDF附加軟件.
ArborText: 在SGML領(lǐng)域內長(cháng)期工作的ArborText, 于一月份發(fā)布了XML styler, 一個(gè)免費的基于Java的XSL編輯器. 它的圖形用戶(hù)界面可以讓我們勿需知道XML語(yǔ)法就能進(jìn)行編輯. 將來(lái), ArborText 會(huì )把XML styler集成到Adept中, Adept是公司給打印出版提供的XML制作工具.
DataChannel: 一個(gè)免費的, 基于Java的有效的解析器, 稱(chēng)為 DXP (DataChannel XML Parser; 基于 Norbert Mikula 著(zhù)名的NXP). 可以從該公司的Web站點(diǎn)獲得. 它新發(fā)布的是免費的XML工具包, XML 開(kāi)發(fā)環(huán)境, 它包括了一套部件, 幫助人們開(kāi)始學(xué)習和應用XML.
Inso: 該公司提供它稱(chēng)為的"首個(gè)集成的, 端對端的, 創(chuàng )建, 轉換, 存儲, 管理, 索引, 查詢(xún)XML內容, 將其發(fā)布到Web, CD-ROM和打印機上的出版解決方案." 其產(chǎn)品包括 DynaTag 4.0, DynaBase 3.0, DynaText 3.1, 和所附的工具 DynaWeb.
IntraNet Solutions: Intra.doc Management System的下一版本, IntraNet Solution的基于Web的文檔管理系統, 將會(huì )管理XML部件和文檔之間的關(guān)系, 提供和第三方XML制作工具的集成鏈接管理, 完善在瀏覽器中XML對象的使用, 并在Intra.doc存儲庫和XML編輯器之間提供一個(gè)交互的元數據模型.
Microsoft: 微軟希望在年底交付Office 9.0, 據報道, 它將有對XML的支持.
Microstar: ActiveSG/XML 是一套在Internet上設計和配置基于事務(wù)的XML/SGML系統的工具和技術(shù). Microstar也提供了免費的Ælfred XML 解析器.
SoftQuad: HTML 編輯器 HotMetal Pro 將很快提供 Live Data Base Pages, 一個(gè)讓開(kāi)發(fā)者將HTML數據拉入數據庫并以XML來(lái)返回的附加軟件.
Vignette: StoryServer 3.2 在Web上交付能使用XML的應用和內容. 它結合了關(guān)系型數據庫, 多媒體和XML內容創(chuàng )建的工具. StoryServer 是一個(gè)Web內容應用平臺, 供建立, 管理, 和交付基于服務(wù)的Web應用之用, 比如在線(xiàn)出版, 知識管理, 和電子商務(wù)系統. (注: CNET對Vignette有財政上的興趣.)
XPublish: XPublish是一個(gè)XML出版系統, 供Web站點(diǎn)開(kāi)發(fā)和管理, 允許開(kāi)發(fā)者以XML進(jìn)行制作, 或用XML構件延展目前的HTML文檔, 然后將站點(diǎn)以HTML來(lái)發(fā)布, 以讓任何的標準Web瀏覽器可以訪(fǎng)問(wèn). 它包含了一個(gè)Cascading style Sheets編輯器.
WebMethods: 該公司制作基于XML的Web Automation 軟件, 提供商業(yè)應用軟件和Web數據的快速集成和直接訪(fǎng)問(wèn). 它的 Web Interface Definition Language (WIDL) 將和HTML/XML和表格的所有交互自動(dòng)化, 提供在標準Web協(xié)議上表現要求-回答交互方式的一個(gè)通用方法.
當然, 如果XML在Web上無(wú)處不在, 你可以看到幾乎每一種基于Web的應用, 特別是HTML編輯器, 數據庫軟件, 和電子商務(wù)軟件, 會(huì )迅速加入對XML的各個(gè)級別的支持.
18 XML的國際化?
XML將使Web建立者創(chuàng )建真正的國際性站點(diǎn)變得比以前都容易. 因為, 比如 Java, 它由Unicode (ISO 10646)定義, Unicode是一個(gè)國際接受的標準, 用于描述世界上所有的字母, 字型, 字符和表意符, 它包括 ASCII ISO 拉丁字符, 日本, 韓國, 中國, 印度, 希臘, 阿拉伯和其它字符. 它甚至允許字符集的混合, 例如, 一篇以日文顯示的XML文檔可以通過(guò)一個(gè)元音變音參照到一個(gè)德文詞匯.
開(kāi)發(fā)者不需要學(xué)習任何腳本語(yǔ)言, 以使Unicode在XML文檔中生效, 文檔在用戶(hù)的瀏覽器中用合適的字符集顯示出來(lái).
19 XML的未來(lái)在哪里?
就圍繞著(zhù)XML的所有活動(dòng), 很難預測六個(gè)月后它會(huì )是什么樣. XML和XLL 規范的合作者Tim Bray說(shuō), "我們已經(jīng)制作了一個(gè)設計用于通用目的的工具, 大范圍的人們對它的關(guān)注和應用證明我們是成功的."
在短期內, XML將可能出現在元數據應用上,如RDF.下一個(gè)大的影響將隨著(zhù)文檔對象模型規范的批準而到來(lái).Bray聲稱(chēng)"XML和DOM的結合確實(shí)是給Web帶來(lái)活力的神奇子彈."
XML也應該會(huì )幫助電子商務(wù).XML將使電子商務(wù)供應商以共同的方法給產(chǎn)品和其相關(guān)信息(價(jià)格,尺寸,顏色,特性)進(jìn)行標識, 使用戶(hù)在Web上對不同的商店進(jìn)行比較.
同時(shí), Netscape和Microsoft會(huì )繼續擴大對XML瀏覽器的支持, 包括有效的和構造良好的XML文檔, 更多的XML應用, 為XML設計的style-sheet支持, 和XML超連接協(xié)議. 請關(guān)注這兩個(gè)公司以及其它軟件供應商在XML制作和出版工具上的進(jìn)展.
20 哪里能學(xué)到更多的XML知識?
XML是一個(gè)復雜的事物, 對于所有Web建立者都具有深刻的含意. 如果你想學(xué)習更多的東西, 這里是一些可以查看的好地址:
萬(wàn)維網(wǎng)聯(lián)盟(W3C):
XML規范.
關(guān)于XML規范的討論.
Extensible style Language (XSL) W3C注釋.
Document Object Model 規范.
參與W3C規范開(kāi)發(fā)的XML開(kāi)發(fā)者的郵件地址清單.
XML常見(jiàn)問(wèn)題解答:
ArborText的 XML鏈接和資源.
微軟的XML 站點(diǎn)提供了XML如何在一個(gè)天氣預報和拍賣(mài)中工作的演示.
Textuality收集了XML規范合作者Tim Bray的關(guān)于XML的FAQ和到其它資源的一些鏈接.
由愛(ài)爾蘭Cork University College的Peter Flynn代表W3C的XML特別興趣組維護的XML FAQ.
XML信息頁(yè)面, 達拉斯Summer Institute of Linguistics 的Robin Cover創(chuàng )建的SGML/XML Web頁(yè)面的一部分.
組織、持續教育:
中國XML聯(lián)盟
圖形通信協(xié)會(huì )的XML文件
SGML Open 是一個(gè)國際性的非盈利性協(xié)會(huì ), 它提倡基于SGML家族標準的結構化文檔和數據交換. 它的InterX.org旨在成為"XML開(kāi)發(fā)者和用戶(hù)的論壇和資源中心".
huihoo.com Copyright (2001,2002,2003,2004) Allright Reseved
看完了基礎知識,下面就實(shí)踐以下吧
本實(shí)例應用了MS的MSXML2_TLB,請自行查找下載
//用于讀寫(xiě)XML的最簡(jiǎn)單的單元
unit XMLPurserUnit;
interface
uses
SysUtils, Classes, Windows, ActiveX, MSXML2_TLB;
type
//本例子通過(guò)DOM方式演示XML文件的讀寫(xiě)過(guò)程
TDOMXMLpurser=class
public
{ 創(chuàng )建并保存XML文檔,XMLDoc:=CoDOMDocument.Create沒(méi)有辦法將文檔類(lèi)型對象填加
到XMLDoc中,因為它沒(méi)有引用相應的DTD}
procedure SavePropertiesToXML(Filename: string; Props: TStrings);
{ 解析已有的XML文檔 }
//適用于節點(diǎn)名稱(chēng)不同的情況
procedure LoadPropertiesFromXML(Filename: string; Props: TStrings);
//適用于節點(diǎn)相同的情況
procedure LoadFromXML(Filename: string; Props: TStrings);
end;
implementation
const
XMLTag = 'xml';
XMLPrologAttrs = 'version="1.0" encoding="UTF-8"';
XMLComment = ' Sample XML document with data about movies'#13 +
'and when and where they are showing'#13 +
'Developed by Keith Wood, 28 May 1999 ';
MovieWatcherTag = 'movie-watcher';
MoviesTag = 'movies';
MovieTag = 'movie';
Id = 'id';
Rating = 'rating';
StarringTag = 'starring';
TitleTag = 'title';
//保存XML
procedure TDOMXMLpurser.SavePropertiesToXML(Filename: string; Props: TStrings);
var
XMLDoc: IXMLDOMDocument;
i:integer;
//----------------------------------------------------------------------------
procedure AddSimpleElement(Parent: IXMLDOMElement; Field: string;
AsCDATA: Boolean = False);
var
Internal: IXMLDOMElement;
begin
Internal := IXMLDOMElement(Parent.AppendChild(
XMLDoc.CreateElement(('Field.FieldName'))));
if AsCDATA then
Internal.AppendChild(XMLDoc.CreateCDATASection(Field))
else
Internal.AppendChild(XMLDoc.CreateTextNode(Field));
end;
procedure GenerateHeaders;
var
Title: IXMLDOMElement;
begin
XMLDoc.AppendChild(XMLDoc.CreateProcessingInstruction(XMLTag, XMLPrologAttrs));
XMLDoc.AppendChild(XMLDoc.CreateComment(XMLComment));
XMLDoc.AppendChild(XMLDoc.CreateElement(MovieWatcherTag));
Title := IXMLDOMElement(XMLDoc.DocumentElement.AppendChild(
XMLDoc.CreateElement(TitleTag)));
Title.AppendChild(XMLDoc.CreateTextNode('焦點(diǎn)新聞'));
end;
procedure GenerateStars(Starring: IXMLDOMElement);
begin
AddSimpleElement(Starring, '(StarField)');
end;
procedure GenerateMovies(moviename:string);
var
Movies, Movie: IXMLDOMElement;
begin
Movies := IXMLDOMElement(XMLDoc.DocumentElement.AppendChild(
XMLDoc.CreateElement(MoviesTag)));
Movie := IXMLDOMElement(Movies.AppendChild(
XMLDoc.CreateElement(MovieTag)));
Movie.SetAttribute(Id, '123');
Movie.SetAttribute(Rating, '456');
AddSimpleElement(Movie, '789');
AddSimpleElement(Movie, moviename);
AddSimpleElement(Movie, '"(DirectorField)"');
GenerateStars(IXMLDOMElement(Movie.AppendChild(
XMLDoc.CreateElement(StarringTag))));
AddSimpleElement(Movie, 'FieldByName(SynopsisField)', True);
end;
//----------------------------------------------------------------------------
begin
try
XMLDoc := CoDOMDocument.Create;
GenerateHeaders;
i:=0;
repeat
GenerateMovies(Props.Strings[i]);
inc(i);
until i>=Props.Count;
Props.Text := XMLDoc.XML;
XMLDoc.save(Filename); //u8-dos格式
//Props.SaveToFile(Filename); //dos格式
finally
{ Release the DOM }
XMLDoc := nil;
end;
end;
//加載無(wú)重復屬性的XML
procedure TDOMXMLpurser.LoadPropertiesFromXML(Filename: string; Props: TStrings);
var
XMLDoc: IXMLDOMDocument;
i: Integer;
procedure LoadSubProperties(Element: IXMLDOMNode; PropPrefix: string);
var
Index: Integer;
begin
if (Element.NodeType = NODE_TEXT) or (Element.NodeType = NODE_CDATA_SECTION) then
Props.Values[Copy(PropPrefix, 2, Length(PropPrefix) - 1)] := Element.NodeValue
else
for Index := 0 to Element.ChildNodes.Length - 1 do
LoadSubProperties(Element.ChildNodes[Index], PropPrefix + '.' + Element.NodeName);
end;
begin
XMLDoc := CoDOMDocument.Create;
Props.Clear;
try
if XMLDoc.Load(Filename) then
with XMLDoc.DocumentElement do
for i := 0 to ChildNodes.Length - 1 do
LoadSubProperties(ChildNodes[i], '');
finally
XMLDoc := nil;
end;
end;
//加載XML
procedure TDOMXMLpurser.LoadFromXML(Filename: string; Props: TStrings);
var
XMLDoc: IXMLDOMDocument;
i: Integer;
procedure LoadSubProperties(Element: IXMLDOMNode; PropPrefix: string);
var
Index: Integer;
begin
if (Element.NodeType = NODE_TEXT) or (Element.NodeType = NODE_CDATA_SECTION) then
Props.Add(Copy(PropPrefix, 2, Length(PropPrefix) - 1)+'='+ Element.NodeValue)
else
for Index := 0 to Element.ChildNodes.Length - 1 do
LoadSubProperties(Element.ChildNodes[Index], PropPrefix + '.' + Element.NodeName);
end;
begin
XMLDoc := CoDOMDocument.Create;
Props.Clear;
try
if XMLDoc.Load(Filename) then
with XMLDoc.DocumentElement do
for i := 0 to ChildNodes.Length - 1 do
LoadSubProperties(ChildNodes[i], '');
finally
XMLDoc := nil;
end;
end;
initialization
{ Initialise COM }
CoInitialize(nil);
finalization
{ Tidy up }
CoUninitialize();
end.
//調用XML讀寫(xiě)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw,XMLPurserUnit;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
FXMLpurser:TDOMXMLpurser;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
FXMLpurser:=TDOMXMLpurser.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FXMLpurser.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
filename:string;
begin
memo1.Lines.Clear;
filename:=ExtractFilePath(application.ExeName)+'MailTemplate.xml';
FXMLpurser.LoadPropertiesFromXML(filename,memo1.Lines);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
filename:string;
begin
memo1.Lines.Clear;
filename:=ExtractFilePath(application.ExeName)+'MailTemplate.xml';
FXMLpurser.LoadFromXML(filename,memo1.Lines);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
FXMLpurser.SavePropertiesToXML(ExtractFilePath(application.ExeName)+'MailTemplate1.xml',memo1.Lines);
end;
end.
//unit1對應的form
object Form1: TForm1
Left = 192
Top = 107
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object WebBrowser1: TWebBrowser
Left = 8
Top = 8
Width = 321
Height = 361
TabOrder = 0
ControlData = {
4C0000002D2100004F2500000000000000000000000000000000000000000000
000000004C000000000000000000000001000000E0D057007335CF11AE690800
2B2E126208000000000000004C0000000114020000000000C000000000000046
8000000000000000000000000000000000000000000000000000000000000000
00000000000000000100000000000000000000000000000000000000}
end
object Memo1: TMemo
Left = 336
Top = 8
Width = 345
Height = 361
Lines.Strings = (
'星球大戰1'
'星球大戰2'
'星球大戰3'
'星球大戰前傳1'
'星球大戰前傳2'
'星球大戰前傳3')
ScrollBars = ssBoth
TabOrder = 1
end
object Button1: TButton
Left = 192
Top = 384
Width = 147
Height = 25
Caption = 'LoadPropertiesFromXML'
TabOrder = 2
OnClick = Button1Click
end
object Button2: TButton
Left = 344
Top = 384
Width = 83
Height = 25
Caption = 'LoadFromXML'
TabOrder = 3
OnClick = Button2Click
end
object Button3: TButton
Left = 432
Top = 384
Width = 121
Height = 25
Caption = 'SavePropertiesToXML'
TabOrder = 4
OnClick = Button3Click
end
end
//一個(gè)最簡(jiǎn)單的XML文件 MailTemplate.xml
<?xml version="1.0"?>
<mailTemplate>
<smtp>
<host>mail.ncisystems.com</host>
<port/>
<user>keith</user>
<from>kbwood@thingies.com</from>
</smtp>
<database>
<alias>mailtemp</alias>
<user/>
<password/>
</database>
<settings>
<pauseTime>2000</pauseTime>
<template>MailMessage.xml</template>
<testing>Y</testing>
</settings>
</mailTemplate>
聯(lián)系客服