### XSL 基础教程第三章

客户端 XSL
如果浏览器支持 XML,，就可以用 XSL 在浏览器中将文档转换成 HTML。
一个 JavaScript 的解决方法
在前文中，我们解释了如何用 XSL 将一个文档从 XML 转换成 HTML。窍门就是向 XML 文件中增加一个 XSL 样式表，然后让浏览器来进行转换。即使这种方法能奏效，在 XML 文件中包含一个样式表引用也并非令人满意的方法，并且在不支持 XSL 的浏览器上这种方法还不能奏效。
一个更通用的方法应该是用一个 JavaScript 来进行从 XML 到 HTML 的转换。使用一个 JavaScript，就更有以下可能性：
允许 JavaScript 进行浏览器细节测试；
根据浏览器和用户需求使用不同的样式表。
这就是 XSL 的美妙之处。XSL 设计目的之一就是使数据从一个格式转换成另一个格式成为可能，从而支持不同的浏览器和不同的用户需求。
客户端 XSL 转换将成为未来浏览器工作任务的一个主要部分，我们还将看到专业化浏览器市场的成长，比如 Braille、 发声网络、网络打印机、手持 PC、移动电话等。
XML 文件和 XSL 文件
现在重新来看看前面章节中的 XML 文档：
<?xml version="1.0"?>
<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 样式表：
<?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 文件的引用，XSL 文件也没有对 XML 文件的引用。注意：上面的句子说明一个 XML 文件可以用许多不同的 XSL 文件进行转换。
在浏览器中将 XML 转换到 HTML
以下是在客户机上将 XML 文件转换成 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>
如果使用的是 Internet Explorer 5.0 或更高版本，请点击这里查看结果。
代码的第一块创建了 Microsoft XML 解析器(XMLDOM)的一个例示，并将 XML 文档加载到内存中。代码的第二块创建解析器的另一个例示，并将 XSL 文档加载到内存中。代码的最后一行用 XSL 文档转换 XML 文档，将结果写入 HTML 文档中。
服务器端 XSL
由于不是所有的浏览器都支持 XML 和 XSL，因此就有了一个在服务器上将 XML 转换成 HTML 的方法。
一个跨浏览器的解决方法
在前面的章节中，我们解释了如何用 XSL 在浏览器中将 XML 文档转换成 HTML，窍门就是让 JavaScript 使用一个 XML 解析器来进行转换。但是当浏览器不支持 XML 解析器时，这种方法是不奏效的。要使 XML 数据对所有浏览器都可用，我们就必须在服务器上转换 XML 文档，并将它作为纯 HTML 发送到浏览器。
这是 XSL 的另一个美妙之处。XSL 的设计目的之一是使得在服务器上将数据从一种格式转换成另一种格式成为可能，并将可读数据返回到所有未来的浏览器中。
在服务器上进行 XSL 转换正在成为未来 Internet 信息服务器工作任务的一个主要部分，同时我们将看到专用浏览器市场的发展，如：Braille、有声网络、网络打印机、手持 PC、移动电话等。
XML 文件和 XSL 文件
现在来重新看看前面章节中的 XML 文档：
<?xml version="1.0"?>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
.
.
.
如果使用的是 Internet Explorer 5.0 或更高版本，可以点击这里查看 XML 文件。
再看看伴随的 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>
如果使用的是 Internet Explorer 5.0 或更高版本，可以点击这里查看 XSL 文件。
以上 XSL 文档的语法在前面章节中已经解释过了，因此这里不再做解释。但是要确保 XML 文件没有对 XSL 文件的引用，XSL 文件也没有对 XML 文件的引用。同时请注意：上面的句子表明一个服务器上的 XML 文件可以用许多不同的 XSL 文件进行转换。
在服务器端将 XML 转换成 HTML
以下是在服务器上转换 XML 文件所需要的简单源代码：
<%
'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"))
'Transform the file
Response.Write(xml.transformNode(xsl))
%>
代码的第一块创建 Microsoft XML 解析器(XMLDOM)的一个例示，并将 XML 文件装载到内存中。代码的第二块创建解析器的另一个例示，并将 XSL 文档装载到内存。代码的最后一行用 XSL 文档转换 XML 文档，并将结果返回浏览器。