XSLT - 在服務(wù)器上
由于并非所有的瀏覽器都支持 XSLT,另一種解決方案是在服務(wù)器上完成 XML 至 XHTML 的轉(zhuǎn)化。
跨瀏覽器解決方案
在前面的章節(jié),我們講解過(guò)如何在瀏覽器中使用 XSLT 來(lái)完成 XML 到 XHTML 的轉(zhuǎn)化。我們創(chuàng)建了一段使用 XML 解析器來(lái)進(jìn)行轉(zhuǎn)化的 JavaScript。JavaScript 解決方案無(wú)法工作于沒(méi)有 XML 解析器的瀏覽器。為了讓 XML 數(shù)據(jù)適用于任何類型的瀏覽器,我們必須在服務(wù)器上對(duì) XML 文檔進(jìn)行轉(zhuǎn)換,然后將其作為 XHMTL 發(fā)送到瀏覽器。
這是 XSLT 的另一個(gè)優(yōu)點(diǎn)。XSLT 的設(shè)計(jì)目標(biāo)之一是使數(shù)據(jù)在服務(wù)器上從一種格式轉(zhuǎn)換到另一種格式成為可能,并向所有類型的瀏覽器返回可讀的數(shù)據(jù)。
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):上面這句話表明,XML 文件可使用多個(gè)不同的 XSL 樣式表來(lái)進(jìn)行轉(zhuǎn)換。
在服務(wù)器把 XML 轉(zhuǎn)換為 XHTML
這是在服務(wù)器上把 XML 文件轉(zhuǎn)換為 XHTML 的源代碼:
<% 'Load XML set xml = Server.CreateObject("Microsoft.XMLDOM") xml.async = false xml.load(Server.MapPath("cdcatalog.xml")) 'Load XSL set xsl = Server.CreateObject("Microsoft.XMLDOM") xsl.async = false xsl.load(Server.MapPath("cdcatalog.xsl")) 'Transform file Response.Write(xml.transformNode(xsl)) %>
提示:假如您不了解如何編寫 ASP,您可以學(xué)習(xí)我們的《ASP 教程》。
第一段代碼創(chuàng)建了微軟的 XML 解析器的一個(gè)實(shí)例,然后把 XML 文件載入了內(nèi)存。第二段代碼創(chuàng)建了解析器的另一個(gè)實(shí)例,然后把這個(gè) XSL 文件載入了內(nèi)存。最后一行代碼使用 XSL 文檔轉(zhuǎn)換了 XML 文檔,并把結(jié)果作為 XHTML 發(fā)送到您的瀏覽器。任務(wù)完成!