XSLT - 在伺服器端
由於並非所有的流覽器都支持 XSLT,另一種解決方案是在伺服器上完成 XML 至 XHTML 的轉化。
跨流覽器解決方案
在前面的章節,我們講解過如何在流覽器中使用 XSLT 來完成 XML 到 XHTML 的轉化。我們創建了一段使用 XML 解析器來進行轉換的 JavaScript。JavaScript 解決方案無法工作於沒有 XML 解析器的流覽器。為了讓 XML 數據適用於任何類型的流覽器,我們必須在伺服器上對 XML 文檔進行轉換,然後將其作為 XHMTL 發送回流覽器。
這是 XSLT 的另一個優點。XSLT 的設計目標之一是使數據在伺服器上從一種格式轉換到另一種格式成為可能,並向所有類型的流覽器返回可讀的數據。
XML 檔和 XSLT 檔
請看這個在前面的章節已展示過的 XML 文檔:
<?xml version="1.0" encoding="UTF-8"?> <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="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th style="text-align:left">Title</th> <th style="text-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> </xsl:template> </xsl:stylesheet>
請注意,這個 XML 檔沒有包含對 XSL 檔的引用。
重要事項:上面這句話意味著,XML 檔可使用多個不同的 XSL 樣式表來進行轉換。
在伺服器把 XML 轉換為 XHTML
這是用於在伺服器上把 XML 檔轉換為 XHTML 的源代碼:
使用 PHP 代碼轉換:
<?php // 載入 XML 檔 $xml = new DOMDocument; $xml->load('cdcatalog.xml'); // 載入 XSL 檔 $xsl = new DOMDocument; $xsl->load('cdcatalog.xsl'); // 設置轉換 $proc = new XSLTProcessor; // 添加 xsl 規則 $proc->importStyleSheet($xsl); echo $proc->transformToXML($xml); ?>
提示:假如您不了解如何編寫 php,您可以學習我們的 PHP 教學。
使用 ASP 代碼轉換:
<% '載入 XML 檔 set xml = Server.CreateObject("Microsoft.XMLDOM") xml.async = false xml.load(Server.MapPath("cdcatalog.xml")) '載入 XSL 檔 set xsl = Server.CreateObject("Microsoft.XMLDOM") xsl.async = false xsl.load(Server.MapPath("cdcatalog.xsl")) '轉換檔 Response.Write(xml.transformNode(xsl)) %>
提示:假如您不了解如何編寫 ASP,您可以學習我們的 ASP 教學。
第一段代碼創建了微軟的 XML 解析器(XMLDOM)的一個實例,並把 XML 檔載入了記憶體。第二段代碼創建瞭解析器的另一個實例,並把這個 XSL 檔載入了記憶體。最後一行代碼使用 XSL 文檔轉換了 XML 文檔,並把結果作為 XHTML 發送到您的流覽器。太好了!