如果我需要将元素的显示按一定的顺序排列,应该如何建立 XSL的索引呢?
我们还是来看前面的例子,还是这段代码:
<?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>
.
.
.
当 XML文档被转换成HTML文件,索引应该同时建立。简单的办法就是给你的for-each元素增加一个order-by属性,就 象 这样:
< xsl:for -each select="CATALOG/CD" order-by="+ ARTIST">
order-by属性带有一个"+"或者"-" 的符号,用来定义索引的方式,是升序 还是降序排列 。符号后面的名字就是要索引的关键字。
例如( cd_catalog_sort.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" order-by="+ ARTIST">
< 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 >
最后,我们用下面的 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_sort.xsl ")
// Transform
document.write ( xml.transformNode ( xsl ))
</script>
</body>
</html>
一 .XSL 入 门
二 .XSL的转换
三 .XSL--在客户端的实现
四 .XSL --- 在服务器端的实现
五 . XSL 的索引
六 . XSL的过滤和查询
七 . XSL 的控制语句
六 . XSL的过滤和查询 章 节 导 航
如果我们希望只显示满足一定的条件的 XML数据应该怎么做呢?还是上面的例子代码,我们只需要在 xsl:for -each元素的select属性中加入参数就可以,类似:
< xsl:for -each select="CATALOG/CD[ARTIST='Bob Dylan']">
参数的逻辑选择有:
= (等于)
=! (不等于)
<& 小于
>& 大于等于
和前面同样的例子 ( cd_catalog_sort.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[ARTIST='Bob Dylan']">
< 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 >
你可以自己测试一下,看到的结果有什么不同。
一 .XSL 入 门
二 .XSL的转换
三 .XSL--在客户端的实现
四 .XSL --- 在服务器端的实现
五 . XSL 的索引
六 . XSL的过滤和查询
七 . XSL 的控制语句
七 . XSL 的控制语句 章 节 导 航
1.条件语句if...then
XSL同样还有条件语句(呵呵~~好厉害吧, 象 程序语言一样)。具体的语法是增加一个 xsl:if 元素,类似这样
< xsl: if match=".[ARTIST='Bob Dylan']">
... some output ...
</ xsl:if >
注意:
1.我见过的格式是:< xsl: if test=".[ARTIST='Bob Dylan']"> ,而不是< xsl: if match=".[ARTIST='Bob Dylan']">
2.在""中有一个".",不应漏掉.
上面的例子改写成为:
<?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">
< xsl:if match=".[ARTIST='Bob Dylan']">
< tr >
<td>< xsl:value -of select="TITLE"/></td>
<td>< xsl:value -of select="ARTIST"/></td>
</ tr >
</ xsl:if >
</ xsl:for -each>
</table>
</body>
</html>
</ xsl:template >
</ xsl:stylesheet >
2. XSL 的Choose
choose的用途是出现多个条件,给出不同显示结果。具体的语法是增加一组 xsl:choose,xsl:when,xsl:otherwise 元素:
< xsl :choose >
< xsl:when match=".[ARTIST='Bob Dylan']">
... some code ...
</ xsl:when >
< xsl:otherwise >
... some code ....
</ xsl :otherwise >
</ xsl:choose >
上面的例子改写成为:
<?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>
< xsl:choose >
< xsl:when match=".[ARTIST='Bob Dylan']">
<td bgcolor ="#ff0000">< xsl:value -of select="ARTIST"/></td>
</ xsl:when >
< xsl:otherwise >
<td>< xsl:value -of select="ARTIST"/></td>
</ xsl:otherwise >
</ xsl:choose >
</ tr >
</ xsl:for -each>
</table>
</body>
</html>
</ xsl:template >
</ xsl:stylesheet >