利用VisualBasic操作XML數(shù)據(jù)

字號(hào):

什么是XML
     擴(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的簡(jiǎn)單使其易于在任何應(yīng)用程序中讀寫(xiě)數(shù)據(jù),這使XML很快成為數(shù)據(jù)交換的公共語(yǔ)言,雖然不同的應(yīng)用軟件也支持其它的數(shù)據(jù)交換格式,但不久之后他們都將支持XML,那就意味著程序可以更容易的與Windows、Mac OS, Linux以及其他平臺(tái)下產(chǎn)生的信息結(jié)合,然后可以很容易加載XML數(shù)據(jù)到程序中并分析他,并以XML格式輸出結(jié)果。
    XML的優(yōu)點(diǎn)
     我們談到XML長(zhǎng)于在不同的應(yīng)用程序之間交換數(shù)據(jù),XML文件也便于構(gòu)建小的數(shù)據(jù)庫(kù),不久以前,軟件都使用INI文件存儲(chǔ)配置信息、用戶參數(shù)以及其他信息,后來(lái)微軟引入了系統(tǒng)注冊(cè)表,接作微軟告訴我們不應(yīng)該再使用INI文件了,從那時(shí)起Visual Basic對(duì)INI文件的支持被削弱了。但不幸的是注冊(cè)表有幾個(gè)致命的缺點(diǎn):不是簡(jiǎn)單的文本文件,難于讀寫(xiě)、可能會(huì)變得龐大和緩慢、如果注冊(cè)表不知何故出現(xiàn)問(wèn)題,將有可能造成系統(tǒng)死機(jī)。
     將配置信息放在XML文件中可以避免這些問(wèn)題,甚至可以將XML文件設(shè)置為一個(gè)共享文件,這樣在不同的計(jì)算機(jī)上的用戶就可以共享數(shù)據(jù),這是注冊(cè)表所不能比擬的。
     在被稱為下一代ASP的ASP.NET中可以在WEB頁(yè)中直接使用XML,你可以使用數(shù)據(jù)綁定控件直接綁定數(shù)據(jù)并自動(dòng)顯示。
     當(dāng)然也可以不選擇XML,使用文本文件、注冊(cè)表、數(shù)據(jù)庫(kù)都可以完成XML所能完成的任務(wù),XML只是你在數(shù)據(jù)存儲(chǔ)和恢復(fù)的另一種工具而已。
    XML語(yǔ)法簡(jiǎn)介
     XML的語(yǔ)法非常的簡(jiǎn)單,XML文檔由節(jié)點(diǎn)組成,使用打開(kāi)和關(guān)閉節(jié)點(diǎn)描述標(biāo)記,在格式上與HTML標(biāo)記非常相似,它們之間的不同是:XML中可以自由定義標(biāo)記名。比如下面的標(biāo)記就描述了一個(gè)電話號(hào)碼:
    <Phone>987-654-3210</Phone>
     而且不用聲明標(biāo)記名就可以使用。
     開(kāi)始和結(jié)束標(biāo)記必須相同,XML是識(shí)別大小寫(xiě)的,所以標(biāo)記的大小寫(xiě)也必須相同。比如上面的例子中以<Phone>標(biāo)記開(kāi)始就必須以</Phone>標(biāo)記結(jié)束,而不能是</phone>或</PHONE>
     節(jié)點(diǎn)標(biāo)記中可以包含屬性,比如下面的代碼中Phone節(jié)點(diǎn)包含屬性Type,其值為WorkFax:
    <Phone Type="WorkFax">987-654-3210<Phone>
     如果不愿意在節(jié)點(diǎn)中包含一個(gè)值,那么可以不需要結(jié)束標(biāo)記,可以用在開(kāi)始標(biāo)記的后面加一個(gè)斜線來(lái)結(jié)束節(jié)點(diǎn),在下面的例子中,Phone標(biāo)記的Number屬性就存儲(chǔ)了一個(gè)電話號(hào)碼,所以就不需要一個(gè)結(jié)束標(biāo)記:
    <Phone Type="WorkFax" Number="987-654-3210" />
     XML文檔的結(jié)構(gòu)是一個(gè)樹(shù)形等級(jí)結(jié)構(gòu)。文檔必須有一個(gè)的根結(jié)點(diǎn),根節(jié)點(diǎn)包含所有其它節(jié)點(diǎn)。下面我們舉一個(gè)較為完整的例子:
    <Addresses>
     <Entry Type="Personal">
     <FirstName>Andy</FirstName>
     <LastName>Fickle</LastName>
     <Street>1234 Programmer Place</Street>
     <City>Bugsville</City>
     <State>CO</State>
     <Zip>82379</Zip>
     <Phone Type="Home">354-493-9489</Phone>
     </Entry>
     <Entry Type="Work">
     <FirstName>Betty</FirstName>
     <LastName>Masterson</LastName>
     <Phone Type="Work">937-878-4958</Phone>
     <Phone Type="WorkFax">937-878-4900</Phone>
     </Entry>
     ...
    </Addresses>
     注意相似的節(jié)點(diǎn)不需要包含相同的信息,例如第一個(gè)Entry節(jié)點(diǎn)包含了地址信息和家庭電話號(hào)碼,第二個(gè)Entry節(jié)點(diǎn)包含了Work和WorkFax電話號(hào)碼,而沒(méi)有包含第一個(gè)Entry節(jié)點(diǎn)包含的信息。
    XML工具
     如前面的例子顯示,XML語(yǔ)法是如此的簡(jiǎn)單以至于你可以在很短的時(shí)間作一個(gè)XML解析器,幸運(yùn)的是你不必這樣做,因?yàn)閄ML工具可以運(yùn)行在各種平臺(tái)上,包括可以安裝了Visual Basic的Windows。
     正是這些L工具而不是XML本身使XML變得更強(qiáng)大和復(fù)雜。不同的解析器使你可以某一時(shí)刻加載整個(gè)XML文檔或只加載某個(gè)節(jié)點(diǎn),與此相反,XML Writer 可以同時(shí)創(chuàng)建一個(gè)XML文檔和節(jié)點(diǎn)。
     DOM解析器使我們能夠很方便的加載、復(fù)制、排序、修改和存儲(chǔ)XML文件,遍歷節(jié)點(diǎn)獲得名稱或?qū)傩?,并給結(jié)果排序。雖然他們的功能沒(méi)有真正的關(guān)系數(shù)據(jù)庫(kù)強(qiáng)大,但DOM的這些特點(diǎn)依然非常有用。
     XSD可以定義XML文檔的格式,XSL擴(kuò)展樣式單定義了怎樣將XML文檔轉(zhuǎn)換成其他可以在WEB瀏覽器中瀏覽的文件格式,比如HTML文件。
     這些工具實(shí)際上比XML本身更復(fù)雜,所以所有講解XML的書(shū)籍都花了很大的篇幅解釋這些XML工具。但這超出了本文的范圍,有興趣的讀者可以參考有關(guān)資料。