即使这种方法的效果很好,在 XML 文件中包含样式表引用也不总是令人满意的(例如,在无法识别 XSLT 的浏览器这种方法就无法奏效)。
更通用的方法是使用 JavaScript 来完成转换。
通过使用 JavaScript,我们可以:
这就是 XSLT 的魅力所在!XSLT 的设计目的之一就是使数据从一种格式转换到另一种格式成为可能,同时支持不同类型的浏览器以及不同的用户需求。
客户端的 XSLT 转换一定会成为未来浏览器所执行的主要任务之一,同时我们也会看到其在特定的浏览器市场的增长(盲文、听觉浏览器、网络打印机,手持设备,等等)。
请看这个在前面的章节已展示过的 XML 文档:
<?xml version="1.0" encoding="ISO-8859-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> |
. |
. |
</catalog> |
<?xml version="1.0" encoding="ISO-8859-1"?> |
<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 的源代码:
<html> |
<head> |
<script> |
function loadXMLDoc(dname) |
{ |
if (window.ActiveXObject) |
{ |
xhttp=new ActiveXObject("Msxml2.XMLHTTP.3.0"); |
} |
else |
{ |
xhttp=new XMLHttpRequest(); |
} |
xhttp.open("GET",dname,false); |
xhttp.send(""); |
return xhttp.responseXML; |
} |
function displayResult() |
{ |
xml=loadXMLDoc("cdcatalog.xml"); |
xsl=loadXMLDoc("cdcatalog.xsl"); |
// code for IE |
if (window.ActiveXObject) |
{ |
ex=xml.transformNode(xsl); |
document.getElementById("example").innerHTML=ex; |
} |
// code for Mozilla, Firefox, Opera, etc. |
else if (document.implementation && document.implementation.createDocument) |
{ |
xsltProcessor=new XSLTProcessor(); |
xsltProcessor.importStylesheet(xsl); |
resultDocument = xsltProcessor.transformToFragment(xml,document); |
document.getElementById("example").appendChild(resultDocument); |
} |
} |
</script> |
</head> |
<body onload="displayResult()"> |
<div id="example"></div> |
</body> |
</html> |
提示:假如您不了解如何编写 JavaScript,请学习我们的 JavaScript 教程。
loadXMLDoc() 函数
loadXMLDoc() 函数是用来加载 XML 和 XSL 文件。
它检查用户拥有的和加载文件的浏览器类型。
displayResult() 函数
该函数用来显示使用 XSL 文件定义样式的 XML 文件。