由于并非所有的瀏覽器都支持 XSLT,另一種解決方案是在服務器上完成 XML 至 XHTML 的轉化。
在前面的章節(jié),我們講解過如何在瀏覽器中使用 XSLT 來完成 XML 到 XHTML 的轉化。我們創(chuàng)建了一段使用 XML 解析器來進行轉換的 JavaScript。JavaScript 解決方案無法工作于沒有 XML 解析器的瀏覽器。
為了讓 XML 數據適用于任何類型的瀏覽器,我們必須在服務器上對 XML 文檔進行轉換,然后將其作為 XHMTL 發(fā)送回瀏覽器。
這是 XSLT 的另一個優(yōu)點。XSLT 的設計目標之一是使數據在服務器上從一種格式轉換到另一種格式成為可能,并向所有類型的瀏覽器返回可讀的數據。
請看這個在前面的章節(jié)已展示過的 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 的源代碼:
<?php
// 載入 XML 文件
$xml = new DOMDocument;
$xml->load('cdcatalog.xml');
// 載入 XSL 文件
$xsl = new DOMDocument;
$xsl->load('cdcatalog.xsl');
// 設置轉換
$proc = new XSLTProcessor;
// 添加 xsl 規(guī)則
$proc->importStyleSheet($xsl);
echo $proc->transformToXML($xml);
?>
<%
'載入 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))
%>
第一段代碼創(chuàng)建了微軟的 XML 解析器(XMLDOM)的一個實例,并把 XML 文件載入了內存。第二段代碼創(chuàng)建了解析器的另一個實例,并把這個 XSL 文件載入了內存。最后一行代碼使用 XSL 文檔轉換了 XML 文檔,并把結果作為 XHTML 發(fā)送到您的瀏覽器。太好了!
更多建議: