原著:Jan Egil Refsnes 翻譯:阿捷
四: XSL --- 在服務器端的實現(xiàn)
1.兼容所有的瀏覽器
在上面一章我們介紹了可以通過JavaScript調(diào)用瀏覽器的XML parser(解析軟件)來轉(zhuǎn)換XML文檔。但是這個方案依然有個問題:如果瀏覽器沒有XML
parser插件怎么辦?(注:IE5內(nèi)自帶XML parser)
為了使我們的XML數(shù)據(jù)能被所有的瀏覽器正確顯示,我們不得不在服務器端將XML轉(zhuǎn)換成純HTML代碼,再輸出給瀏覽器。
這也是使用XSL的另一個好處。在服務器端將一種格式轉(zhuǎn)換為另一種格式也是XSL的設(shè)計目標之一。
同樣,轉(zhuǎn)換工作也將成為未來服務器段的主要工作。
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>
下面是在服務器端轉(zhuǎn)換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,建議閱讀有關(guān)書籍。(當然,也可以采用其他的語言編寫服務器端程序)
第一段代碼建立一個Microsoft Parser(XMLDOM)解析的對象,并將XML文檔讀入內(nèi)存;第二段代碼建立另外一個對象并導入XSL文檔;最后一行代碼將XML文檔用XSL文檔轉(zhuǎn)換,并將結(jié)果輸出到HTML文件中。