原著:Jan Egil Refsnes 翻譯:阿捷
三. XSL--在客戶端的實(shí)現(xiàn)
1.JavaScript解決方案
在上面的章節(jié)中我們已經(jīng)解釋了XSL是如何將XML轉(zhuǎn)換成HTML文件。方法就是在XML文檔的頭部加入一個(gè)XSL樣式表信息,然后讓瀏覽器執(zhí)行轉(zhuǎn)換過程。
這種方法在大部分情況下都做得很好,但是在不支持XML的瀏覽器中就無法正確顯示了。
一個(gè)更好的更全面的解決方案是使用Javascript來實(shí)現(xiàn)XML到HTML的轉(zhuǎn)換。但是使用JavaScript必須得到以下功能支持:
a.允許Javascript代替瀏覽器進(jìn)行細(xì)節(jié)檢測(cè);
b.根據(jù)不同的需要和不同的瀏覽器使用不同的樣式表。
對(duì)于XSL來說這是完全可行的。設(shè)計(jì)XSL的目標(biāo)之一就是允許將一種格式轉(zhuǎn)換成另一種格式,支持不同的瀏覽器,支持不同的用戶需求。未來的瀏覽器的重要任務(wù)就是在客戶端執(zhí)行XSL的轉(zhuǎn)換工作。
2.一個(gè)具體的實(shí)例
下面是我們上面提到的一個(gè)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>
注意,現(xiàn)在XML文件還沒有加入XSL樣式表,還沒有被轉(zhuǎn)換成HTML文件。
下面是用JavaSript來實(shí)現(xiàn)最后轉(zhuǎn)換的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,您最好專門學(xué)習(xí)一下。
第一段代碼建立一個(gè)Microsoft Parser(XMLDOM)解析的對(duì)象,并將XML文檔讀入內(nèi)存;第二段代碼建立另外一個(gè)對(duì)象并導(dǎo)入XSL文檔;最后一行代碼將XML文檔用XSL文檔轉(zhuǎn)換,并將結(jié)果輸出到HTML文件中。