四: XSL --- 在服務器端的實現 1.兼容所有的浏覽器 在上面一章我們介紹了可以通過Javascript調用浏覽器的XML parser(解析軟件)來轉換XML文檔。但是這個方案依然有個問題:如果浏覽器沒有XML
parser插件怎麼辦?(注:IE5內自帶XML parser)
為了使我們的XML數據能被所有的浏覽器正確顯示,我們不得不在服務器端將XML轉換成純Html代碼,再輸出給浏覽器。
這也是使用XSL的另一個好處。在服務器端將一種格式轉換為另一種格式也是XSL的設計目標之一。
同樣,轉換工作也將成為未來服務器段的主要工作。
2.一個具體實例
下面是我們上面提到的一個XML文檔(cd_catalog.XML)例子的部分代碼:
<?XML version="1.0" encoding="ISO8859-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>
.
.
.
下面是完整的XSL文件(cd_catalog.xsl):
<?XML version='1.0'?>
<xsl:stylesheet XMLns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<Html>
<body>
<table border="2" bgcolor="yellow">
<tr>
<th>Title</th>
<th>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>
下面是在服務器端轉換XML文件為Html文件的原代碼:
<%
'Load the XML
set xml = Server.CreateObject("Microsoft.XMLDOM")
XML.async = false
xml.load(Server.MapPath("cd_catalog.XML"))
'Load the XSL
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("cd_catalog.xsl"))
Response.Write(XML.transformNode(xsl))
%>
注意:我們這裡的例子采用的是ASP文件,用VBScript編寫的。如果您不了解ASP或者VBScript,建議閱讀有關書籍。(當然,也可以采用其他的語言編寫服務器端程序)
第一段代碼建立一個Microsoft Parser(XMLDOM)解析的對象,並將XML文檔讀入內存;第二段代碼建立另外一個對象並導入XSL文檔;最後一行代碼將XML文檔用XSL文檔轉換,並將結果輸出到Html文件中。