三. XSL--在客戶端的實現
1.Javascript解決方案
在上面的章節中我們已經解釋了XSL是如何將XML轉換成Html文件。方法就是在XML文檔的頭部加入一個XSL樣式表信息,然後讓浏覽器執行轉換過程。
這種方法在大部分情況下都做得很好,但是在不支持XML的浏覽器中就無法正確顯示了。
一個更好的更全面的解決方案是使用Javascript來實現XML到Html的轉換。但是使用JavaScript必須得到以下功能支持:
a.允許Javascript代替浏覽器進行細節檢測;
b.根據不同的需要和不同的浏覽器使用不同的樣式表。
對於XSL來說這是完全可行的。設計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文件還沒有加入XSL樣式表,還沒有被轉換成Html文件。
下面是用JavaSript來實現最後轉換的Html代碼:
<Html>
<body>
<script language="Javascript">
// Load XML
var xml = new ActiveXObject("Microsoft.XMLDOM")
XML.async = false
xml.load("cd_catalog.XML")
// Load the XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("cd_catalog.xsl")
// Transform
document.write(XML.transformNode(xsl))
</script>
</body>
</Html>
上面代碼中使用了Javascript,如果你不知道如何寫JavaScript,您最好專門學習一下。
第一段代碼建立一個Microsoft Parser(XMLDOM)解析的對象,並將XML文檔讀入內存;第二段代碼建立另外一個對象並導入XSL文檔;最後一行代碼將XML文檔用XSL文檔轉換,並將結果輸出到Html文件中。