当前位置: 首页 > 工具软件 > DocBook XSL > 使用案例 >

XSL 简明教程 (下)

暴乐邦
2023-12-01
XSL 简明教程 (下)

五 . XSL 的索引 
 章 节 导 航 

 

如果我需要将元素的显示按一定的顺序排列,应该如何建立 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']"> 

参数的逻辑选择有: 

= (等于) 

=! (不等于) 

&LT& 小于 

&GT& 大于等于 

和前面同样的例子 ( 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 >
 

 类似资料: