XSLT 服务器
由于并非所有的浏览器都支持 XSLT,另一种解决方案是在服务器上完成 XML 至 XHTML 的转化。
跨浏览器解决方案
在前面的章节,我们讲解过如何在浏览器中使用 XSLT 来完成 XML 到 XHTML 的转化。我们创建了一段使用 XML 解析器来进行转化的 JavaScript。JavaScript 解决方案无法工作于没有 XML 解析器的浏览器。为了让 XML 数据适用于任何类型的浏览器,我们必须在服务器上对 XML 文档进行转换,然后将其作为 XHMTL 发送到浏览器。
这是 XSLT 的另一个优点。XSLT 的设计目标之一是使数据在服务器上从一种格式转换到另一种格式成为可能,并向所有类型的浏览器返回可读的数据。
XML 文件和 XSL 文件
请看这个在前面的章节已展示过的 XML 文档:
<?xml version="1.0" encoding="utf-8"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
.
.
.
</catalog>
以及附随的 XSL 样式表:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">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 文件的引用。
重要事项: 上面这句话表明,XML 文件可使用多个不同的 XSL 样式表来进行转换。
在服务器把 XML 转换为 XHTML
下面以 ASP.net 为例,在服务器上把 XML 文件转换为 XHTML 的源代码:
System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
xml.Load(Server.MapPath("/example/xml/cd.xml"));
System.Xml.XmlDocument xsl = new System.Xml.XmlDocument();
xsl.Load(Server.MapPath("/example/xml/cd.xsl"));
System.IO.StringWriter output = new System.IO.StringWriter();
System.Xml.Xsl.XslTransform transform = new System.Xml.Xsl.XslTransform();
transform.Load(xsl.CreateNavigator());
transform.Transform(xml.CreateNavigator(), null, output);
Response.ContentType = "text/xml";
Response.Write(xml.OuterXml);
提示:假如您不了解如何编写 ASP.net,您可以学习我们的《ASP.NET 教程》。
首先分别加载 XML 和 XSL 文件,然后利用 XslTransform 将 XSL 转换为 XML,最后将转换的 XML 输出到浏览器端。