版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第10章 JavaScript中的XML編程 隨著隨著XML的流行,的流行,JavaScript開發(fā)人開發(fā)人員也迫切希望在客戶端員也迫切希望在客戶端Web開發(fā)中應(yīng)用開發(fā)中應(yīng)用XML。 目前的主流瀏覽器已經(jīng)提供了對(duì)目前的主流瀏覽器已經(jīng)提供了對(duì)XML的支持,本章將介紹如何在的支持,本章將介紹如何在JavaScript中使中使用瀏覽器提供的用瀏覽器提供的XML編程特性。編程特性。 本章將主要討論本章將主要討論Mozilla Firefox和和Internet Explorer這兩種瀏覽器中的這兩種瀏覽器中的XML編編程方法。程方法。 XML基礎(chǔ)10.1 瀏覽器中的XML DOM10.2 瀏覽器中的X
2、Path10.3 瀏覽器中的XSLT10.410.1 XML基礎(chǔ) XML即可擴(kuò)展標(biāo)記語言即可擴(kuò)展標(biāo)記語言Extensible Markup Language),是一種平臺(tái)無關(guān)的表示數(shù)據(jù)的方法。),是一種平臺(tái)無關(guān)的表示數(shù)據(jù)的方法。 使用使用XML創(chuàng)建的數(shù)據(jù)可以被任何應(yīng)用程序在創(chuàng)建的數(shù)據(jù)可以被任何應(yīng)用程序在任何平臺(tái)上讀取,甚至可以通過手動(dòng)編碼來編輯任何平臺(tái)上讀取,甚至可以通過手動(dòng)編碼來編輯和創(chuàng)建和創(chuàng)建XML文檔,因?yàn)槲臋n,因?yàn)閄ML與與HTML一樣,都一樣,都是基于文本的標(biāo)記語言。是基于文本的標(biāo)記語言。 XML在數(shù)據(jù)的表示方面具有很好的靈活性和在數(shù)據(jù)的表示方面具有很好的靈活性和可擴(kuò)展性,例可擴(kuò)展性
3、,例10-1是一個(gè)是一個(gè)XML的示例,它描述了的示例,它描述了員工的基本信息。員工的基本信息。【例【例10-1】 employees.xml Tom Black M 30 03 C+ Java Bill Gates M 40 01 VB 10.1.1 XPath簡(jiǎn)介 XML可以處理多種數(shù)據(jù),因此必須有可以處理多種數(shù)據(jù),因此必須有一種在一種在XML文檔中定位數(shù)據(jù)的方式,這就文檔中定位數(shù)據(jù)的方式,這就是是XPath,它專門用于在,它專門用于在XML中進(jìn)行定位中進(jìn)行定位匹配。匹配。 本節(jié)將對(duì)本節(jié)將對(duì)XPath進(jìn)行簡(jiǎn)要介紹,更深入進(jìn)行簡(jiǎn)要介紹,更深入的討論請(qǐng)讀者參考相關(guān)文檔。的討論請(qǐng)讀者參考相關(guān)文檔。
4、 每個(gè)每個(gè)XPath表達(dá)式由兩部分組成:上下表達(dá)式由兩部分組成:上下文節(jié)點(diǎn)和節(jié)點(diǎn)模式。文節(jié)點(diǎn)和節(jié)點(diǎn)模式。 上下文節(jié)點(diǎn)提供了節(jié)點(diǎn)模式起始的位置。上下文節(jié)點(diǎn)提供了節(jié)點(diǎn)模式起始的位置。 節(jié)點(diǎn)模式是由一個(gè)或者多個(gè)節(jié)點(diǎn)選擇器節(jié)點(diǎn)模式是由一個(gè)或者多個(gè)節(jié)點(diǎn)選擇器組成的字符串。組成的字符串。 例如,考慮對(duì)例例如,考慮對(duì)例10-1中的中的XML文檔使文檔使用如下的用如下的XPath表達(dá)式:表達(dá)式: Employee/Name/FirstName 如果上下文節(jié)點(diǎn)是如果上下文節(jié)點(diǎn)是XML文檔的根節(jié)點(diǎn)文檔的根節(jié)點(diǎn),那么該,那么該XPath表達(dá)式匹配了表達(dá)式匹配了Tom和和Bill這兩個(gè)節(jié)點(diǎn)。這兩個(gè)節(jié)點(diǎn)。 其中其中Em
5、ployee、Name和和FirstName是是XML文檔中的元素名稱。文檔中的元素名稱。 我們可以在我們可以在XPath中增加方括號(hào)對(duì)選擇中增加方括號(hào)對(duì)選擇的節(jié)點(diǎn)進(jìn)行限制。的節(jié)點(diǎn)進(jìn)行限制。 例如需要選擇年齡大于例如需要選擇年齡大于35歲的雇員名字,可歲的雇員名字,可以修改以修改XPath表達(dá)式如下:表達(dá)式如下: EmployeeAge35/Name/FirstName 上 面 的上 面 的 X P a t h 表 達(dá) 式 匹 配 的 節(jié) 點(diǎn) 是表 達(dá) 式 匹 配 的 節(jié) 點(diǎn) 是Bill,僅包含了年齡大,僅包含了年齡大于于35歲的雇員名字。歲的雇員名字。 XPath還支持使用符號(hào)匹配還支持使用
6、符號(hào)匹配XML文檔中的屬文檔中的屬性,例如下面的性,例如下面的XPath匹配了匹配了id為為001的雇員名字。的雇員名字。 Employeeid=001/Name/FirstName XPath是一種非常強(qiáng)大的表達(dá)式,使用它可是一種非常強(qiáng)大的表達(dá)式,使用它可以很容易地在以很容易地在XML文檔中查找指定的節(jié)點(diǎn)。文檔中查找指定的節(jié)點(diǎn)。10.1.2 XSLT簡(jiǎn)介 XSLT可擴(kuò)展樣式表語言轉(zhuǎn)換是可擴(kuò)展樣式表語言轉(zhuǎn)換是XML的的姊妹語言,它可以將姊妹語言,它可以將XML轉(zhuǎn)換為任何基于文本的轉(zhuǎn)換為任何基于文本的形式。形式。 很多應(yīng)用中使用它將很多應(yīng)用中使用它將XML轉(zhuǎn)換為轉(zhuǎn)換為HTML,當(dāng),當(dāng)然,這只是然
7、,這只是XSLT的一種用途。的一種用途。XSLT樣式表由一樣式表由一些模板組成,這些模板決定了輸出文本的格式。些模板組成,這些模板決定了輸出文本的格式。 仍然考慮例仍然考慮例10-1中的中的XML文檔,現(xiàn)在我們希文檔,現(xiàn)在我們希望將雇員的望將雇員的id和全名和全名FirstName+LastName在在HTML頁面中輸出。格式如例頁面中輸出。格式如例10-2所示。所示。 【例【例10-2】 Employees.html10.2 瀏覽器中的XML DOM 目前只有兩個(gè)瀏覽器支持客戶端的目前只有兩個(gè)瀏覽器支持客戶端的XML處理,它們是處理,它們是IE和和Mozilla瀏覽器。瀏覽器。 下面將分別介
8、紹在這兩種瀏覽器中進(jìn)下面將分別介紹在這兩種瀏覽器中進(jìn)行行XML DOM處理的方法。處理的方法。10.2.1 IE中的XML DOM 在為在為IE添加添加XML編程特性時(shí),微軟選編程特性時(shí),微軟選擇了基于擇了基于ActiveX技術(shù)的技術(shù)的MSXML庫。庫。 它是微軟開發(fā)的它是微軟開發(fā)的XML開發(fā)程序庫,可開發(fā)程序庫,可以在以在VB、C+等多種語言中使用。等多種語言中使用。 在在JavaScript中可以通過中可以通過ActiveXObject類創(chuàng)建類創(chuàng)建ActiveX對(duì)象。對(duì)象。 IE 4.0以及更低版本以及更低版本IE的客戶端必須單的客戶端必須單獨(dú)安裝獨(dú)安裝MSXML庫,才能使用庫,才能使用X
9、ML編程相編程相關(guān)的功能,關(guān)的功能,IE 5.0及更高版本的及更高版本的IE則集成了則集成了MSXML庫,并將其中的庫,并將其中的ActiveX控件設(shè)置控件設(shè)置為安全控件,使之不受瀏覽器安全性設(shè)置為安全控件,使之不受瀏覽器安全性設(shè)置的影響。的影響。 使用使用XML DOM進(jìn)行進(jìn)行XML解析時(shí),必解析時(shí),必須解決的問題包括:創(chuàng)建須解決的問題包括:創(chuàng)建DOM對(duì)象并加載對(duì)象并加載XML文檔、文檔、XML節(jié)點(diǎn)操作和異常的處理。節(jié)點(diǎn)操作和異常的處理。1創(chuàng)建XML文檔對(duì)象 MSXML庫存在多個(gè)版本,每個(gè)版本具有不庫存在多個(gè)版本,每個(gè)版本具有不同的對(duì)象注冊(cè)名,而我們不能確定用戶安裝的同的對(duì)象注冊(cè)名,而我們不
10、能確定用戶安裝的MSXML庫版本,在很多情況下客戶端還可能安庫版本,在很多情況下客戶端還可能安裝了多個(gè)版本的裝了多個(gè)版本的MSXML庫。庫。 通常的策略是盡可能地使用最新的版本,從通常的策略是盡可能地使用最新的版本,從而獲取更高的執(zhí)行效率和穩(wěn)定性。而獲取更高的執(zhí)行效率和穩(wěn)定性。 使用例使用例10-4所示的所示的createDocument函數(shù)函數(shù)可以滿足要求,它將依次嘗試創(chuàng)建以下版可以滿足要求,它將依次嘗試創(chuàng)建以下版本的本的ActiveX控件,直到創(chuàng)建成功為止,如控件,直到創(chuàng)建成功為止,如果果createDocument函數(shù)返回函數(shù)返回false,說明客,說明客戶端未安裝戶端未安裝MSXML或
11、者瀏覽器不是或者瀏覽器不是Windows平臺(tái)的平臺(tái)的IEMac平臺(tái)的平臺(tái)的IE不支持不支持ActiveX控件)??丶?。 以下列出了各種版本以下列出了各種版本MSXML庫的庫的DOM對(duì)象注對(duì)象注冊(cè)名。冊(cè)名。(1MSXML2.DOMDocument.6.0(2MSXML2.DOMDocument.5.0(3MSXML2.DOMDocument.4.0(4MSXML2.DOMDocument.3.0(5MSXML2.DOMDocument(6Microsoft.DOMDocument 【例【例10-4】 創(chuàng)建創(chuàng)建DOM對(duì)象對(duì)象2加載XML文檔 MSXML的的DOMDocument對(duì)象可以使對(duì)象可以
12、使用用load方法加載一個(gè)指定的方法加載一個(gè)指定的URL,也可以,也可以使用使用loadXML方法加載方法加載XML的文本內(nèi)容。的文本內(nèi)容。 當(dāng)使用當(dāng)使用load方法加載方法加載XML文檔時(shí),有文檔時(shí),有同步和異步兩種模式。同步和異步兩種模式。 在同步模式下需要將在同步模式下需要將DOMDocument對(duì)象的對(duì)象的async屬性設(shè)置為屬性設(shè)置為false,這樣通過該,這樣通過該對(duì)象的對(duì)象的load方法加載方法加載XML時(shí),程序會(huì)一直時(shí),程序會(huì)一直等待直到等待直到XML文檔加載完成。文檔加載完成。 / 創(chuàng)建創(chuàng)建DOMDocument對(duì)象對(duì)象 var doc = createDocument();
13、 / 設(shè)置為同步模式設(shè)置為同步模式 doc.async = false; / 加載加載XML doc.load(books.xml); 一般來說,由于網(wǎng)絡(luò)延時(shí)、應(yīng)用程序處一般來說,由于網(wǎng)絡(luò)延時(shí)、應(yīng)用程序處理等因素,加載理等因素,加載XML的過程必然會(huì)存在一的過程必然會(huì)存在一定的延時(shí),使用同步模式往往導(dǎo)致瀏覽器定的延時(shí),使用同步模式往往導(dǎo)致瀏覽器在等待在等待XML數(shù)據(jù)返回的過程中失去響應(yīng),數(shù)據(jù)返回的過程中失去響應(yīng), 因此在大多數(shù)情況下建議使用異步模式,因此在大多數(shù)情況下建議使用異步模式,這也是這也是DOMDocument對(duì)象默認(rèn)的文檔加載對(duì)象默認(rèn)的文檔加載方法。方法。 例例10-5所示是使用異步
14、模式加載所示是使用異步模式加載XML文檔的示例代碼。文檔的示例代碼。 【例【例10-5】 加載加載XML文檔文檔 【例【例10-6】 加載加載XML文檔文檔 3訪問XML節(jié)點(diǎn) DOMDocument對(duì)象對(duì)應(yīng)于對(duì)象對(duì)應(yīng)于DOM標(biāo)準(zhǔn)標(biāo)準(zhǔn)中的中的Document接口,因此接口,因此DOMDocument對(duì)象可以使用標(biāo)準(zhǔn)的對(duì)象可以使用標(biāo)準(zhǔn)的DOM方法進(jìn)行方法進(jìn)行XML節(jié)節(jié)點(diǎn)操作,點(diǎn)操作,DOMDocument對(duì)象的常用屬性如對(duì)象的常用屬性如表表10-1所示。所示。 其中其中text和和xml兩個(gè)屬性是微軟對(duì)兩個(gè)屬性是微軟對(duì)DOM標(biāo)準(zhǔn)的擴(kuò)展,分別用于返回節(jié)點(diǎn)的文本內(nèi)標(biāo)準(zhǔn)的擴(kuò)展,分別用于返回節(jié)點(diǎn)的文本內(nèi)容
15、和容和XML文本。文本。表10-1 DOMDocument對(duì)象常用屬性屬 性 名 稱含 義attributes所有屬性節(jié)點(diǎn)的列表childNodes所有的子節(jié)點(diǎn)firstChild第一個(gè)子節(jié)點(diǎn)屬 性 名 稱含 義lastChild最后一個(gè)子節(jié)點(diǎn)previousSibling上一個(gè)兄弟節(jié)點(diǎn)nextSibling下一個(gè)兄弟節(jié)點(diǎn)parentNode父節(jié)點(diǎn)documentElement文檔的根節(jié)點(diǎn)nodeName節(jié)點(diǎn)名稱nodeType節(jié)點(diǎn)類型nodeValue節(jié)點(diǎn)值ownerDocument節(jié)點(diǎn)所在的文檔對(duì)象text節(jié)點(diǎn)的文本內(nèi)容xml節(jié)點(diǎn)的XML文本 【例【例10-7】 books.xml 表10
16、-2 DOMDocument對(duì)象常用方法方 法 名 稱含 義appendChild將節(jié)點(diǎn)作為最后一個(gè)子節(jié)點(diǎn)附加到父節(jié)點(diǎn)中cloneNode創(chuàng)建節(jié)點(diǎn)的副本createAttribute創(chuàng)建屬性節(jié)點(diǎn)createCDATASection創(chuàng)建CDATA節(jié)點(diǎn)createComment創(chuàng)建注釋節(jié)點(diǎn)createDocumentFragment創(chuàng)建文檔片段createElement創(chuàng)建元素節(jié)點(diǎn)createEntityReference創(chuàng)建實(shí)體引用節(jié)點(diǎn)createNode根據(jù)指定的名稱、類型和命名空間創(chuàng)建節(jié)點(diǎn)createProcessingInstruction創(chuàng)建處理指令節(jié)點(diǎn)createTextNode創(chuàng)建文
17、本節(jié)點(diǎn)getElementsByTagName根據(jù)指定的節(jié)點(diǎn)名稱返回元素的集合hasChildNodes判斷節(jié)點(diǎn)是否具有子節(jié)點(diǎn)insertBefore將節(jié)點(diǎn)插入到指定的子節(jié)點(diǎn)之前nodeFromID根據(jù)ID返回指定的節(jié)點(diǎn)removeChild刪除指定的子節(jié)點(diǎn)replaceChild替換指定的子節(jié)點(diǎn)save將XML文檔保存到指定的位置4異常處理 在加載在加載XML文檔的過程中,無論使用文檔的過程中,無論使用load方法還是方法還是loadXML方法,都有可能發(fā)方法,都有可能發(fā)生生XML格式不正確的情況。格式不正確的情況。 表10-3parseError對(duì)象屬性屬 性 名 稱含 義errorCod
18、e錯(cuò)誤碼,errorCode不等于零說明有異常發(fā)生filepos引發(fā)異常的代碼在文件中所處的絕對(duì)位置lineXML文檔中錯(cuò)誤所在的行號(hào)lineposXML文檔中錯(cuò)誤在行內(nèi)的位置reason導(dǎo)致異常的原因srcTextXML文檔中錯(cuò)誤所在行的文本內(nèi)容urlXML文檔的URL 【例【例10-8】 XML DOM異常處理異常處理 10.2.2 Mozilla中的XML DOM 與與IE的做法不同,的做法不同,Mozilla瀏覽器將瀏覽器將XML DOM作為其作為其JavaScript實(shí)現(xiàn)的一部分,實(shí)現(xiàn)的一部分,因此因此Mozilla瀏覽器中的瀏覽器中的XML特性可以在各特性可以在各個(gè)平臺(tái)的個(gè)平臺(tái)的M
19、ozilla瀏覽器中使用,而且瀏覽器中使用,而且Mozilla的的XML DOM實(shí)現(xiàn)了對(duì)實(shí)現(xiàn)了對(duì)DOM Level 2的支持。的支持。1創(chuàng)建XML文檔對(duì)象 在在Mozilla瀏覽器中創(chuàng)建瀏覽器中創(chuàng)建XML文檔對(duì)象文檔對(duì)象的方法如下所示:的方法如下所示: document.implementation.createDocument(namespaceURI, rootname, doctype)2加載XML文檔 在在Mozilla中也可以使用中也可以使用load方法加載指定方法加載指定URL的的XML文檔,默認(rèn)情況下它采用異步加載模文檔,默認(rèn)情況下它采用異步加載模式。式。 如果需要采取同步的模式
20、加載如果需要采取同步的模式加載XML文檔,那文檔,那么必須將么必須將DOM對(duì)象的對(duì)象的async屬性設(shè)置為屬性設(shè)置為false。 Mozilla中的中的XML文檔對(duì)象在加載文檔對(duì)象在加載XML的過的過程中不存在程中不存在readyState屬性從屬性從1到到4的變化。的變化。 當(dāng)文檔加載完成之后,當(dāng)文檔加載完成之后,DOM對(duì)象將被觸發(fā)對(duì)象將被觸發(fā)load事件,通常在事件,通常在load事件的處理函數(shù)中進(jìn)行事件的處理函數(shù)中進(jìn)行XML文檔的處理,如例文檔的處理,如例10-9所示。所示。 【例【例10-9】 加載加載XML文檔文檔 【例【例10-10】 加載加載XML字符串字符串3訪問XML節(jié)點(diǎn) M
21、ozilla對(duì)對(duì)XML DOM的實(shí)現(xiàn)是完全符合的實(shí)現(xiàn)是完全符合DOM標(biāo)準(zhǔn)的,因此表標(biāo)準(zhǔn)的,因此表10-1和表和表10-2中列舉的絕大中列舉的絕大多數(shù)屬性和方法都可以在多數(shù)屬性和方法都可以在Mozilla瀏覽器中使用,瀏覽器中使用,調(diào)用方法也是相同的。調(diào)用方法也是相同的。 需要特別說明的是,需要特別說明的是,text和和xml這兩個(gè)屬性,這兩個(gè)屬性,它們是微軟對(duì)它們是微軟對(duì)DOM標(biāo)準(zhǔn)的擴(kuò)展,因此標(biāo)準(zhǔn)的擴(kuò)展,因此Mozilla瀏瀏覽器不支持它們。覽器不支持它們。 但是在但是在Mozilla中可以通過其他的方式實(shí)現(xiàn)類中可以通過其他的方式實(shí)現(xiàn)類似的功能。似的功能。 以下的以下的getText方法將會(huì)返
22、回節(jié)點(diǎn)中的方法將會(huì)返回節(jié)點(diǎn)中的文本內(nèi)容,該方法通過遞歸方式遍歷了節(jié)文本內(nèi)容,該方法通過遞歸方式遍歷了節(jié)點(diǎn)的所有葉子節(jié)點(diǎn)。點(diǎn)的所有葉子節(jié)點(diǎn)。 在在Mozilla中需要特別注意的問題是空中需要特別注意的問題是空白文本節(jié)點(diǎn)也會(huì)被遍歷,這里需要將白文本節(jié)點(diǎn)也會(huì)被遍歷,這里需要將nodeValue節(jié)點(diǎn)值使用節(jié)點(diǎn)值使用trim函數(shù)進(jìn)行處函數(shù)進(jìn)行處理,如例理,如例10-11所示。所示。 【例【例10-11】 序列化序列化XML節(jié)點(diǎn)普通文本)節(jié)點(diǎn)普通文本) 【例【例10-12】 序列化序列化XML節(jié)點(diǎn)節(jié)點(diǎn)XML格式)格式) 4異常處理 Mozilla中提供了相應(yīng)的機(jī)制對(duì)加載中提供了相應(yīng)的機(jī)制對(duì)加載XML時(shí)可能
23、發(fā)生的異常進(jìn)行處理,與時(shí)可能發(fā)生的異常進(jìn)行處理,與IE不不同,當(dāng)發(fā)生異常時(shí)同,當(dāng)發(fā)生異常時(shí)Mozilla會(huì)通過會(huì)通過XML文檔文檔對(duì)象加載一個(gè)包含錯(cuò)誤信息的對(duì)象加載一個(gè)包含錯(cuò)誤信息的XML文檔。文檔。 例如將例如將books.xml稍作修改,使其格式稍作修改,使其格式不正確,如例不正確,如例10-13所示。所示。10.3 瀏覽器中的XPath 10.3.1 IE中的XPath 在IE中使用XPath非常簡(jiǎn)單,直接 使 用 s e l e c t N o d e s 或 者selectSingleNode方法即可進(jìn)行XPath查詢。考慮以下的XML文檔:10.3.2 Mozilla中的XPath
24、 Mozilla中中XPath的實(shí)現(xiàn)方式是符合的實(shí)現(xiàn)方式是符合DOM Level 3中關(guān)于中關(guān)于XPath的接口定義的,的接口定義的,盡管盡管IE的的selectNodes方法十分直觀,但方法十分直觀,但Mozilla的方式可以實(shí)現(xiàn)更加強(qiáng)大的功能。的方式可以實(shí)現(xiàn)更加強(qiáng)大的功能。 在在Mozilla中進(jìn)行中進(jìn)行XPath查詢需要使用查詢需要使用兩個(gè)關(guān)鍵的對(duì)象:兩個(gè)關(guān)鍵的對(duì)象:XPathEvaluator和和XpathResult。 它們分別用于執(zhí)行它們分別用于執(zhí)行XPath查詢和保存查查詢和保存查詢結(jié)果。詢結(jié)果。 【例【例10-14】 Mozilla瀏覽器中的瀏覽器中的XPath查查詢?cè)儽?0-
25、4XPath結(jié)果集類型定義常 數(shù)值含 義ANY_TYPE0結(jié)果集包含XPath查詢獲取的任何類型的節(jié)點(diǎn),注意當(dāng)結(jié)果集為DOM節(jié)點(diǎn)集合時(shí),ANY_TYPE 相當(dāng)于UNORDERED_ NODE_ITERATOR_TYPE續(xù)表常 數(shù)值含 義NUMBER_TYPE1結(jié)果集為單個(gè)數(shù)字時(shí)使用該類型,例如使用count函數(shù)的XPath表達(dá)式STRING_TYPE2結(jié)果集為單個(gè)字符串時(shí)使用該類型BOOLEAN_TYPE3結(jié)果集為單個(gè)布爾值時(shí)使用該類型,例如使用not函數(shù)的XPath表達(dá)式UNORDERED_NODE_ITERATOR_TYPE4結(jié)果集為DOM節(jié)點(diǎn)集合,節(jié)點(diǎn)在結(jié)果集中出現(xiàn)的順序不一定和它們?cè)赬
26、ML文檔中的順序一致ORDERED_NODE_ITERATOR_TYPE5結(jié)果集為DOM節(jié)點(diǎn)集合,節(jié)點(diǎn)在結(jié)果集中出現(xiàn)的順序和它們?cè)赬ML文檔中的順序一致UNORDERED_NODE_SNAPSHOT_TYPE6結(jié)果集為DOM節(jié)點(diǎn)集合的快照即在執(zhí)行evaluate方法之后該集合的內(nèi)容不會(huì)因XML文檔中節(jié)點(diǎn)的變化而變化),節(jié)點(diǎn)在結(jié)果集中出現(xiàn)的順序不一定和它們?cè)赬ML文檔中的順序一致ORDERED_NODE_SNAPSHOT_TYPE7結(jié)果集為DOM節(jié)點(diǎn)集合的快照,節(jié)點(diǎn)在結(jié)果集中出現(xiàn)的順序和它們?cè)赬ML文檔中的順序一致ANY_UNORDERED_NODE_TYPE8如果存在與XPath匹配的節(jié)點(diǎn),結(jié)
27、果集中僅包含一個(gè)DOM節(jié)點(diǎn),該節(jié)點(diǎn)不一定是第一個(gè)符合條件的節(jié)點(diǎn)FIRST_ORDERED_NODE_TYPE9如果存在與XPath匹配的節(jié)點(diǎn),結(jié)果集中僅包含一個(gè)DOM節(jié)點(diǎn),它是第一個(gè)符合條件的節(jié)點(diǎn) 【例【例10-15】 books_ns.xml 【例【例10-16】 命名空間解析函數(shù)命名空間解析函數(shù) 【例【例10-17】 Mozilla中的中的XPath查詢查詢 10.4 瀏覽器中的XSLT 顯然,顯然,IE和和Mozilla的的XSLT實(shí)現(xiàn)機(jī)制也是不實(shí)現(xiàn)機(jī)制也是不同的,同的,IE使用基于使用基于ActiveX對(duì)象的解決方案,而對(duì)象的解決方案,而Mozilla則使用其內(nèi)置的則使用其內(nèi)置的XSL
28、TProcessor對(duì)象。對(duì)象。 10.4.1 IE中的中的XSLT IE中提供了兩種不同的方式進(jìn)行中提供了兩種不同的方式進(jìn)行XSLT轉(zhuǎn)換:轉(zhuǎn)換:使用使用DOMDocument和和XSLTemplate對(duì)象。對(duì)象。 例例10-18和例和例10-19是本節(jié)將要使用的是本節(jié)將要使用的XML文文檔檔books.xml和和XSLT樣式表樣式表books.xsl)。)。 【例【例10-18】 books.xml 【例【例10-19】 books.xsl 1基于DOMDocument的XSLT轉(zhuǎn)換 如果如果XSLT轉(zhuǎn)換只需進(jìn)行一次,以后不會(huì)再使轉(zhuǎn)換只需進(jìn)行一次,以后不會(huì)再使用同一個(gè)用同一個(gè)XSLT樣式表,
29、那么使用樣式表,那么使用DOMDocument對(duì)象的對(duì)象的transformNode方法是最簡(jiǎn)單直接的。方法是最簡(jiǎn)單直接的。 具體步驟是首先分別加載具體步驟是首先分別加載XML文檔和文檔和XSLT樣式表,然后調(diào)用樣式表,然后調(diào)用DOMDocument對(duì)象的對(duì)象的transformNode方法,該方法的輸入?yún)?shù)是與方法,該方法的輸入?yún)?shù)是與XSLT樣式表對(duì)應(yīng)樣式表對(duì)應(yīng)DOMDocument對(duì)象,例對(duì)象,例10-20所示是具體的實(shí)現(xiàn)代碼。所示是具體的實(shí)現(xiàn)代碼。 【例【例10-20】 基于基于DOMDocument的的XSLT轉(zhuǎn)換轉(zhuǎn)換2基于XSLTemplate的XSLT轉(zhuǎn)換 MSXML還提供了另一
30、個(gè)對(duì)象用于還提供了另一個(gè)對(duì)象用于XSLT轉(zhuǎn)換,它就是轉(zhuǎn)換,它就是XSLTemplate,使用它,使用它進(jìn)行進(jìn)行XSLT轉(zhuǎn)換的步驟如下:轉(zhuǎn)換的步驟如下: (1創(chuàng)建創(chuàng)建DOM對(duì)象并且加載對(duì)象并且加載XML文檔;文檔; (2創(chuàng)建創(chuàng)建DOM對(duì)象并且加載對(duì)象并且加載XSLT樣式表,樣式表,需要特別注意的是,為了在需要特別注意的是,為了在XSLTemplate對(duì)對(duì)象中使用樣式表,必須創(chuàng)建線程安全的象中使用樣式表,必須創(chuàng)建線程安全的DOM對(duì)象,它對(duì)應(yīng)于對(duì)象,它對(duì)應(yīng)于MSXML庫中的另一庫中的另一個(gè)個(gè)ActiveX控件;控件; (3創(chuàng)建創(chuàng)建XSLTemplate對(duì)象,并且將其對(duì)象,并且將其stylesheet
31、屬性設(shè)置為屬性設(shè)置為XSLT樣式表的樣式表的DOM對(duì)象;對(duì)象; ( 4 通 過 通 過 X S LTe m p l a t e 對(duì) 象 創(chuàng) 建對(duì) 象 創(chuàng) 建XSLProcessor對(duì)象,并且將其對(duì)象,并且將其input屬性設(shè)屬性設(shè)置為置為XML文檔的文檔的DOM對(duì)象;對(duì)象; (5調(diào)用調(diào)用XSLProcessor對(duì)象的對(duì)象的transform方法執(zhí)行方法執(zhí)行XSLT轉(zhuǎn)換。轉(zhuǎn)換。 具體的實(shí)現(xiàn)代碼如例具體的實(shí)現(xiàn)代碼如例10-21所示。所示。 【例【例10-21】 基于基于XSLTemplate的的XSLT轉(zhuǎn)轉(zhuǎn)換換 【例【例10-22】 books.xsl 【例【例10-23】 books.xsl 10.4.2 Mozilla中的XSLT Mozilla中進(jìn)行中進(jìn)行XSLT轉(zhuǎn)換的核心對(duì)象是轉(zhuǎn)換的核心對(duì)象是XSLTProcessor,它類似于,它類似于IE中的中的XslProcessor對(duì)對(duì)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 海南師范大學(xué)《工程估價(jià)與費(fèi)用管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年度水路貨物運(yùn)輸合同(含貨物保險(xiǎn)、風(fēng)險(xiǎn)控制)6篇
- 二零二五年度工程車運(yùn)輸合同管理范本3篇
- 2025年度智能辦公系統(tǒng)租賃服務(wù)合同范本3篇
- 2025年度綠色建筑商品房建筑工程施工監(jiān)管協(xié)議3篇
- 運(yùn)營餐廳課程設(shè)計(jì)
- 勞動(dòng)合同法對(duì)媒體行業(yè)從業(yè)者的管理探討
- 運(yùn)動(dòng)館親子訓(xùn)練課程設(shè)計(jì)
- 檢修部副主任安全職責(zé)(4篇)
- 二零二五年度大型活動(dòng)專用班車租賃合同3篇
- 物業(yè)年終總結(jié)匯報(bào)工作
- 金色簡(jiǎn)約蛇年年終總結(jié)匯報(bào)模板
- 醫(yī)院住院病歷質(zhì)量檢查評(píng)分表(評(píng)分標(biāo)準(zhǔn))
- 12.1 擁有積極的人生態(tài)度(教學(xué)設(shè)計(jì))2024七年級(jí)道德與法治上冊(cè)
- 視聽說課程(《走遍美國》)教學(xué)方案
- 2024年內(nèi)蒙古中考語文試卷五套合卷附答案
- 高中體育與健康-短跑教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 廠房廠區(qū)保潔方案
- 汽車租賃服務(wù)方案(投標(biāo)方案)
- 中國鋰離子電池行業(yè)發(fā)展環(huán)境(PEST)分析
- ODM合作合同協(xié)議書范本全面(2024版)
評(píng)論
0/150
提交評(píng)論