XSL(可擴(kuò)展樣式表語(yǔ)言)是對(duì)CSS的一種擴(kuò)展,功能比CSS強(qiáng)大得多。XML鏈接是在HTML鏈接的功能之上加以擴(kuò)展,可以支持更為復(fù)雜的鏈接,通過(guò)XML鏈接,不僅可以在XML文件之間建立鏈接,還可以建立其他類(lèi)型數(shù)據(jù)之間的鏈接,其規(guī)范分為三個(gè)部分:XLink語(yǔ)言,XPointer語(yǔ)言和XML Base.
XML標(biāo)準(zhǔn)體系中還有其他很多技術(shù),比如針對(duì)DTD的不足而提出的XML Schema,對(duì)XML文檔進(jìn)行結(jié)構(gòu)話(huà)處理的DOM等,由于篇幅的關(guān)系,在這就不一一列舉,不熟悉的請(qǐng)參考有關(guān)書(shū)籍。
好了,現(xiàn)在讓我們開(kāi)始進(jìn)入正題——對(duì)XML的操作。首先,請(qǐng)保證您的
電腦中有最新版本的MSXML,微軟XML核心服務(wù)(MSXML)版本4.0提供了從Visual Basic6.0加載和存儲(chǔ)XML文檔的工具。若沒(méi)有,請(qǐng)到http://msdn.microsoft.com/xml/default.asp中下載最新版本的MSXML,并安裝在計(jì)算機(jī)上。在Visual Basic 6.0中使用Microsoft XML V4.0對(duì)象引用其他對(duì)象一樣,首先在工程菜單中選擇引用菜單項(xiàng),選擇Microsoft V4.0,單擊OK,一切完成后就現(xiàn)在就可以在VB應(yīng)用
程序中添加X(jué)ML對(duì)象了。如圖:
萬(wàn)事俱備,我們先用VB和MSXML的COM接口的DOM實(shí)現(xiàn)的一個(gè)例子來(lái)對(duì)XML操作進(jìn)行初步的了解吧。
首先聲明下面要用的幾個(gè)對(duì)象的變量:
Dim tempdoc As DOMDocument Dim tempnode As IXMLDOMNode Dim tempelement As IXMLDOMElement Dim tempattribute As IXMLDOMElement Dim root As IXMLDOMElement |
文檔對(duì)象
模型(DOM)使用了一系列相應(yīng)的對(duì)象描述了XML文檔的等級(jí)狀態(tài),DOMDocument類(lèi)是一個(gè)描繪XML文檔的DOM結(jié)構(gòu)的MSXML類(lèi)。DOMDocument類(lèi)僅僅提供了很少的幾個(gè)有用的屬性和方法,例如:Load方法載入一個(gè)xml文件,loadxml方法將字符串作為xml數(shù)據(jù)添加到對(duì)象中。DOMDocument的xml屬性返回文檔的xml描述,可以顯示這些返回值看看這些文檔究竟是什么樣子,也可以將它存儲(chǔ)為一個(gè)文件,DOMDocument對(duì)象的documentElement屬性表示文檔數(shù)據(jù)的根結(jié)點(diǎn),通常情況下操作XML文檔都從這里開(kāi)始。DOMDocument提供了幾種創(chuàng)建新節(jié)點(diǎn)的方法。CreateElement方法為文檔創(chuàng)建一個(gè)新的元素節(jié)點(diǎn),其他創(chuàng)建節(jié)點(diǎn)的方法有createAttribute, createProcessingInstruction, 和 createTextNode,在這里就不一一介紹了。
IXMLDOMNode類(lèi)描述了一個(gè)節(jié)點(diǎn),該類(lèi)提供了一系列用于搜索和操縱XML文檔的屬性和方法。selectSingleNode 方法用于搜索指定節(jié)點(diǎn)的后代,用于搜索指定節(jié)點(diǎn)路徑的語(yǔ)言稱(chēng)為XPATH,XPATH非常棘手,本文就不詳細(xì)說(shuō)明其規(guī)范了。在IXMLDOMNode對(duì)象中,有許多有用的屬性值:
attributes.節(jié)點(diǎn)屬性集合
nodeName.節(jié)點(diǎn)的標(biāo)記名
nodeTypeString.節(jié)點(diǎn)的類(lèi)型
ownerDocument.返回DOMDocument對(duì)象包含的節(jié)點(diǎn)
text.表示節(jié)點(diǎn)包含的文本內(nèi)容。如果該節(jié)點(diǎn)包含其他節(jié)點(diǎn),那么text代表了所有節(jié)點(diǎn)的文本內(nèi)容的組合。
xml.給出了節(jié)點(diǎn)的xml內(nèi)容,例如:"<Email>hongwanfu@yahoo.com</Email>".
ChildNodes集合包含了節(jié)點(diǎn)的子節(jié)點(diǎn)。要給節(jié)點(diǎn)增加一個(gè)子節(jié)點(diǎn),首先必須給使用DOMDocument對(duì)象的節(jié)點(diǎn)創(chuàng)建方法,然后將這個(gè)新建的節(jié)點(diǎn)加入到父節(jié)點(diǎn)的childNodes集合中。 ChildNodes集合包含了節(jié)點(diǎn)的子節(jié)點(diǎn)。要給節(jié)點(diǎn)增加一個(gè)子節(jié)點(diǎn),首先必須給使用DOMDocument對(duì)象的節(jié)點(diǎn)創(chuàng)建方法,然后將這個(gè)新建的節(jié)點(diǎn)加入到父節(jié)點(diǎn)的childNodes集合中。
由于每個(gè)節(jié)點(diǎn)類(lèi)型都有不同的訪(fǎng)問(wèn)方法和內(nèi)容限制,有時(shí)候使用特定類(lèi)型的節(jié)點(diǎn)要比使用通用 IXMLDOMNode 對(duì)象更容易。要做到這一點(diǎn),需要使用 IXMLDOMElement 對(duì)象來(lái)處理 XML 數(shù)據(jù)元素和屬性。正如元素可以包含 XML 數(shù)據(jù)文件中的子元素、文本、注釋、處理說(shuō)明、CDATA 部分和實(shí)體引用一樣,IXMLDOMElement 對(duì)象也可以包含 IXMLDOMElement、IXMLDOMText、IXMLDOMComment、IXMLDOMProcessingInstruction、IXMLDOMCDATASection 和 IXMLDOMEntityReference 對(duì)象。可以通過(guò)使用 IXMLDOMElement 對(duì)象的 getAttribute 和 setAttribute 方法來(lái)訪(fǎng)問(wèn)屬性;或者通過(guò) IXMLDOMElement 對(duì)象的 attributes 屬性,將屬性作為 IXMLDOMNamedNodeMap 對(duì)象進(jìn)行管理。有關(guān)使用這些方法和對(duì)象的詳細(xì)信息,請(qǐng)參閱 MSXML 4.0 SDK Help。
接下來(lái)我們要做的是生成一個(gè)XML DOMDocument 對(duì)象 :
Set tempdoc = New DOMDocument |
生成根節(jié)點(diǎn)并把它設(shè)置為文件的根 :
Set root = tempdoc.createElement("Personal") Set tempdoc.documentElement = root |
生成孩子節(jié)點(diǎn)添加到根節(jié)點(diǎn)上去,并且為這個(gè)節(jié)點(diǎn)設(shè)置一個(gè)屬性 :
Set tempnode = tempdoc.createNode(NODE_ELEMENT, "Web", "") tempnode.Text = " http://hongwanfu.126.com " root.appendChild tempnode |
取得元素節(jié)點(diǎn)的接口,添加屬性:
Set tempelement = tempnode tempelement.setAttribute "Type", "Homepage" |
最后,寫(xiě)XML文件:
Open "CreateXMLFile.xml" for output as #1 Print #1, root.XML Close #1 |
下面就是上面程序生成的CreateXMLFile.xml文件的內(nèi)容如圖: