劉春雪,冮波,朱明
(1.黑龍江省氣象信息中心,黑龍江哈爾濱 150030;2.佳木斯衛(wèi)星地面站,黑龍江佳木斯 154004;3.鐵力市氣象局,黑龍江鐵力 152500)
如何使用Visual Basic讀取XML文件
劉春雪1,冮波2,朱明3
(1.黑龍江省氣象信息中心,黑龍江哈爾濱 150030;2.佳木斯衛(wèi)星地面站,黑龍江佳木斯 154004;3.鐵力市氣象局,黑龍江鐵力 152500)
XML(Extensible Markup Language)即可擴(kuò)展標(biāo)記語(yǔ)言,它與HTML一樣,都是SGML(Standard Generalized Markup Language,標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言)。XML是Internet環(huán)境中跨平臺(tái)的,依賴于內(nèi)容的技術(shù),是當(dāng)前處理結(jié)構(gòu)化文檔信息的有力工具。擴(kuò)展標(biāo)記語(yǔ)言XML是一種簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)語(yǔ)言,使用一系列簡(jiǎn)單的標(biāo)記描述數(shù)據(jù),而這些標(biāo)記可以用方便的方式建立,雖然XML占用的空間比二進(jìn)制數(shù)據(jù)要占用更多的空間,但XML極其簡(jiǎn)單易于掌握和使用。
XML與Access,Oracle和SQL Server等數(shù)據(jù)庫(kù)不同,數(shù)據(jù)庫(kù)提供了更強(qiáng)有力的數(shù)據(jù)存儲(chǔ)和分析能力,例如:數(shù)據(jù)索引、排序、查找、相關(guān)一致性等,XML僅僅是展示數(shù)據(jù)。事實(shí)上XML與其他數(shù)據(jù)表現(xiàn)形式最大的不同是:它極其簡(jiǎn)單。這是一個(gè)看上去有點(diǎn)瑣細(xì)的優(yōu)點(diǎn),但正是這點(diǎn)使XML與眾不同。
XML文件是一個(gè)樹形結(jié)構(gòu)的文件,文件有一個(gè)根節(jié)點(diǎn),根節(jié)點(diǎn)下面有若干的子節(jié)點(diǎn)。每個(gè)子節(jié)點(diǎn)下面可能還有若干的子節(jié)點(diǎn)。
XML語(yǔ)言在氣象業(yè)務(wù)中也正在廣泛的使用,佳木斯衛(wèi)星地面站的軌道報(bào)就是XML格式的文件,區(qū)域站的站號(hào)表是XML格式的,自動(dòng)土壤水分觀測(cè)系統(tǒng)的站號(hào)表文件也是XML格式的。因此,使用編程語(yǔ)言對(duì)XML文件的讀取對(duì)對(duì)工作是一件十分必要的事情。
佳木斯衛(wèi)星地面站是我們國(guó)家一個(gè)重要的衛(wèi)星地面站,每天接收風(fēng)云2號(hào)下發(fā)的衛(wèi)星資料。每天早晨08:00左右,國(guó)家氣象衛(wèi)星中心通過(guò)風(fēng)云2號(hào)將軌道報(bào)廣播下來(lái),軌道報(bào)文件的格式是XML的,文件的子節(jié)點(diǎn)中里包含著每天佳木斯衛(wèi)星地面站對(duì)應(yīng)的接收風(fēng)云2號(hào)資料的時(shí)間,每天的衛(wèi)星資料接收工作需要讀取這個(gè)文件中每個(gè)子節(jié)點(diǎn)內(nèi)容,以確定雷達(dá)開機(jī)的時(shí)間。
下面就以如何讀取佳木斯衛(wèi)星地面站的軌道報(bào)為例,闡述一下如何通過(guò)Visual Basic讀取XML文件。
軌道報(bào)存儲(chǔ)路徑及文件名:d:/fy2_trans/IFLAllSat-PassTime20100517.xml
開發(fā)語(yǔ)言:Visual Basic
首先運(yùn)行VisualBasic,新建工程,并且在引用中選中Microsoft XML5.0。添加命令按鈕其name屬性的值為Command1,添加一個(gè)文本框,其name屬性的值為Txt_xml,為了將程序讀取XML文件之后的值顯示出來(lái)。
定義一個(gè)DOMDocument對(duì)象,名字為xml,執(zhí)行xml的Load方法,裝入d:/fy2_trans/IFLAllSatPassTime20100517.xml文件。定義一個(gè)IXMLDOMElement對(duì)象,其名稱為root,代表XML文件的根節(jié)點(diǎn),將root對(duì)象賦值為xml.documentElement。
Root對(duì)象就是XML的根節(jié)點(diǎn),其屬性text的值就是根節(jié)點(diǎn)及下屬所有子節(jié)點(diǎn)的text值,通常程序中并不使用根節(jié)點(diǎn)的text屬性,因?yàn)槠浒膬?nèi)容太多;程序通常是使用其某個(gè)特定子節(jié)點(diǎn)的內(nèi)容,這樣就需要對(duì)其子節(jié)點(diǎn)進(jìn)行尋找。
root對(duì)象的childNodes屬性是一個(gè)對(duì)象,表示其下屬的所有子節(jié)點(diǎn),可以通過(guò)for each語(yǔ)句來(lái)遍歷根節(jié)點(diǎn)下面的所有子節(jié)點(diǎn)。在實(shí)際工作中,程序需要讀取一個(gè)具體子節(jié)點(diǎn)的內(nèi)容,這個(gè)子節(jié)點(diǎn)相對(duì)根節(jié)點(diǎn)可能是第一層,也可能是第二層,還有可能是第三層。這時(shí)需要通過(guò)IXMLDOMNode對(duì)象的selectS-ingleNode屬性來(lái)實(shí)現(xiàn),比如軌道報(bào)中經(jīng)常使用其Num子節(jié)點(diǎn)的內(nèi)容、transferMode子節(jié)點(diǎn)的內(nèi)容,transferMode節(jié)點(diǎn)下的BeginTime子節(jié)點(diǎn)的內(nèi)容,對(duì)于這樣的多層節(jié)點(diǎn)內(nèi)容,要用多層的selectSingleNod來(lái)實(shí)現(xiàn)。Node.selectSingleNode(“Num”). Text表示Num子節(jié)點(diǎn)的內(nèi)容,Node.selectSingleNode(“Transfer-Mode”).selectSingleNode(“BeginTime”).Text表示transferMode節(jié)點(diǎn)下的BeginTime的內(nèi)容。
遍歷了root節(jié)點(diǎn)下的各個(gè)子節(jié)點(diǎn)內(nèi)容后,可以通過(guò)文本框Txt_xml將顯示出來(lái),觀察一下文本框顯示的內(nèi)容,可以判斷程序執(zhí)行的是否成功。
XML語(yǔ)言是一種使用廣泛的標(biāo)記語(yǔ)言,其容易使用的特性使其在未來(lái)會(huì)用很大應(yīng)用空間,其在氣象方面的應(yīng)用也越來(lái)越多。文章通過(guò)詳細(xì)的說(shuō)明,介紹如何通過(guò)Visual Basic語(yǔ)言讀取XML文件的內(nèi)容。本文源碼全部經(jīng)過(guò)調(diào)試,讀者如果感興趣,自己做實(shí)驗(yàn)調(diào)試一下。
1002-252X(2011)03-0043-01
2011-6-6
劉春雪(1969-),女,黑龍江省哈爾濱市人,哈爾濱廣播電視大學(xué),大專生,工程師.