XSLT - 客戶(hù)端
如果您的瀏覽器支持 XSLT,那么在瀏覽器中它可被用來(lái)將文檔轉(zhuǎn)換為 XHTML。
JavaScript 解決方案
在前面的章節(jié),我們已向您講解如何使用 XSLT 將某個(gè) XML 文檔轉(zhuǎn)換為 XHTML。我們是通過(guò)以下途徑完成這個(gè)工作的:向 XML 文件添加 XSL 樣式表,并通過(guò)瀏覽器完成轉(zhuǎn)換。
即使這種方法的效果很好,在 XML 文件中包含樣式表引用也不總是令人滿(mǎn)意的(例如,在無(wú)法識(shí)別XSLT的瀏覽器這種方法就無(wú)法奏效)。
更通用的方法是使用 JavaScript 來(lái)完成轉(zhuǎn)換。
通過(guò)使用 JavaScript,我們可以:
- 進(jìn)行瀏覽器確認(rèn)測(cè)試
- 根據(jù)瀏覽器和使用者的需求來(lái)使用不同的樣式表
這就是 XSLT 的魅力所在!XSLT 的設(shè)計(jì)目的之一就是使一種格式到另一種格式的轉(zhuǎn)換成為可能,同時(shí)支持不同類(lèi)型的瀏覽器以及不同的用戶(hù)需求。
瀏覽器端的 XSLT 轉(zhuǎn)換一定會(huì)成為未來(lái)瀏覽器所執(zhí)行的主要任務(wù)之一,同時(shí)我們也會(huì)看到其在特定的瀏覽器市場(chǎng)的增長(zhǎng)(盲文、網(wǎng)絡(luò)打印機(jī),聽(tīng)覺(jué)設(shè)備,等等)。
XML 文件和 XSL 文件
請(qǐng)看這個(gè)在前面的章節(jié)已展示過(guò)的 XML 文檔:
<?xml version="1.0" encoding="ISO-8859-1"?> <catalog> <cd> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> <country>USA</country> <company>Columbia</company> <price>10.90</price> <year>1985</year> </cd> . . . </catalog>
以及附隨的 XSL 樣式表:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th align="left">Title</th> <th align="left">Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title" /></td> <td><xsl:value-of select="artist" /></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
請(qǐng)注意,這個(gè) XML 文件沒(méi)有包含對(duì) XSL 文件的引用。
重要事項(xiàng):上面這句話(huà)意味著,XML 文件可使用多個(gè)不同的 XSL 樣式表來(lái)進(jìn)行轉(zhuǎn)換。
在瀏覽器中把 XML 轉(zhuǎn)換為 XHTML
這是用于在客戶(hù)端把 XML 文件轉(zhuǎn)換為 XHTML 的源代碼:
<html> <body> <script type="text/javascript"> // Load XML var xml = new ActiveXObject("Microsoft.XMLDOM") xml.async = false xml.load("cdcatalog.xml") // Load XSL var xsl = new ActiveXObject("Microsoft.XMLDOM") xsl.async = false xsl.load("cdcatalog.xsl") // Transform document.write(xml.transformNode(xsl)) </script> </body> </html>
提示:假如您不了解如何編寫(xiě) JavaScript,請(qǐng)學(xué)習(xí)我們的《JavaScript 教程》。
第一段代碼創(chuàng)建了微軟的 XML 解析器的一個(gè)實(shí)例,然后把 XML 文件載入了內(nèi)存。第二段代碼創(chuàng)建了解析器的另一個(gè)實(shí)例,然后把這個(gè) XSL 文件載入了內(nèi)存。最后一行代碼使用 XSL 文檔轉(zhuǎn)換了 XML 文檔,并在瀏覽器中把結(jié)果作為 XHTML 顯示出來(lái)。任務(wù)完成!