有关XSLT的学习笔记二
2009-11-24 17:12
453 查看
XSL 样式表由一个或多套被称为模板(template)的规则组成。
每个模板含有当某个指定的节点被匹配时所应用的规则。
match
属性用于关联 XML 元素和模板。match 属性也可用来为整个文档定义模板。match 属性的值是 XPath 表达式(举例,match="/" 定义整个文档)。
下一个元素,<xsl:stylesheet>
,定义此文档是一个 XSLT 样式表文档(连同版本号和 XSLT 命名空间属性)。
<xsl:template>
元素定义了一个模板。而 match="/"
属性则把此模板与 XML 源文档的根相联系。
<xsl:template> 元素内部的内容定义了写到输出结果的 HTML 代码。
最后两行定义了模板的结尾,及样式表的结尾。
查看XML文件
,查看 XSL 文件
,查看结果
此例的结果有一点小缺陷,因为数据没有从 XML 文档被复制到输出。
在下一节,您将学习到如何使用 <xsl:value-of>
元素从 XML 元素选取值。
<xsl:value-of> 元素用于提取某个选定节点的值。
</td>
<td>
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>[/code]
注释:
select
属性的值是一个 XPath 表达式。此表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录。
查看此 XML 文件
,查看此 XSL 文件
,并查看结果
。
这个例子的结果有一点缺陷:仅有一行数据从 XML 文档被拷贝到输出结果。
在下面的章节中,你将学习如何使用 <xsl:for-each>
元素来循环遍历 XML 元素,并显示所有的记录。
<xsl:for-each> 元素允许您在 XSLT 中进行循环。
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>[/code]
注释:
select
属性的值是一个 XPath 表达式。此表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录。
查看此 XML 文件
,查看此 XSL 文件
,并查看结果
。
">[/code]
!= (不等于)
< (小于)
> (大于)
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>[/code]
查看此 XML 文件
,查看此 XSL 文件
,并查看结果
。
<xsl:sort> 元素用于对结果进行排序。
<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>[/code]
注释:
select
属性指示需要排序的 XML 元素。
查看此 XML 文件
,查看此 XSL 文件
,并查看结果
。
<xsl:if> 元素用于放置针对 XML 文件内容的条件测试。
<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>[/code]
注释:
必选的 test
属性的值包含了需要求值的表达式。
上面的代码仅仅会输出价格高于 10 的 CD 的 title 和 artist 元素。
查看此 XML 文件
,查看此 XSL 文件
,查看结果
。
XSLT <xsl:choose> 元素用于结合 <xsl:when> 和 <xsl:otherwise> 来表达多重条件测试。
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>[/code]
上面的代码会在 CD 的价格高于 10 时向 "Artist" 列添加粉色的背景颜色。
查看此 XML 文件
,查看此 XSL 文件
,查看结果
。
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/></td>
<td bgcolor="#cccccc">
<xsl:value-of select="artist"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>[/code]
上面的代码会在 CD 的价格高于 10 时向 "Artist" 列添加粉色的背景颜色,并在 CD 的价格高于 9 且低于等于 10 时向 "Artist" 列添加灰色的背景颜色。
查看此XML文件
,查看此XSL文件
,查看结果
。
假如我们向 <xsl:apply-templates> 元素添加一个 select 属性,此元素就会仅仅处理与属性值匹配的子元素。我们可以使用 select 属性来规定子节点被处理的顺序。
请看下面的 XSL 样式表:
查看此XML文件
,查看此XSL文件
,查看结果
。
每个模板含有当某个指定的节点被匹配时所应用的规则。
<xsl:template> 元素
<xsl:template> 元素用于构建模板。match
属性用于关联 XML 元素和模板。match 属性也可用来为整个文档定义模板。match 属性的值是 XPath 表达式(举例,match="/" 定义整个文档)。
好了,让我们看一下上一节中的 XSL 文件的简化版本:
<?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>Title</th> <th>Artist</th> </tr> <tr> <td>.</td> <td>.</td> </tr> </table> </body> </html> </xsl:template> </xsl:stylesheet>
代码解释:
由于 XSL 样式表本身也是一个 XML 文档,因此它总是由 XML 声明起始:<?xml version="1.0" encoding="ISO-8859-1"?>
下一个元素,<xsl:stylesheet>
,定义此文档是一个 XSLT 样式表文档(连同版本号和 XSLT 命名空间属性)。
<xsl:template>
元素定义了一个模板。而 match="/"
属性则把此模板与 XML 源文档的根相联系。
<xsl:template> 元素内部的内容定义了写到输出结果的 HTML 代码。
最后两行定义了模板的结尾,及样式表的结尾。
以上转换的结果类似这样:
查看XML文件
,查看 XSL 文件
,查看结果
此例的结果有一点小缺陷,因为数据没有从 XML 文档被复制到输出。
在下一节,您将学习到如何使用 <xsl:value-of>
元素从 XML 元素选取值。
<xsl:value-of> 元素用于提取某个选定节点的值。
<xsl:value-of> 元素
<xsl:value-of> 元素用于提取某个选定节点的值,并把值添加到转换的输出流中:<?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>Title</th> <th>Artist</th> </tr> <tr> <td>[code]<xsl:value-of select="catalog/cd/title"/>
</td>
<td>
<xsl:value-of select="catalog/cd/artist"/>
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>[/code]
注释:
select
属性的值是一个 XPath 表达式。此表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录。
上面的转换结果类似这样:
查看此 XML 文件
,查看此 XSL 文件
,并查看结果
。
这个例子的结果有一点缺陷:仅有一行数据从 XML 文档被拷贝到输出结果。
在下面的章节中,你将学习如何使用 <xsl:for-each>
元素来循环遍历 XML 元素,并显示所有的记录。
<xsl:for-each> 元素允许您在 XSLT 中进行循环。
<xsl:for-each> 元素
<xsl:for-each> 元素可用于选取指定的节点集中的每个 XML 元素。<?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>Title</th> <th>Artist</th> </tr> [code]<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>[/code]
注释:
select
属性的值是一个 XPath 表达式。此表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录。
上面的转换结果类似这样:
查看此 XML 文件
,查看此 XSL 文件
,并查看结果
。
结果过滤
通过在 <xsl:for-each> 元素中添加一个选择属性的判别式,我们也可以过滤从 XML 文件输出的结果。<xsl:for-each select="catalog/cd[code][artist='Bob Dylan']
">[/code]
合法的过滤运算符:
= (等于)!= (不等于)
< (小于)
> (大于)
<?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>Title</th> <th>Artist</th> </tr> [code]<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>[/code]
上面的转换结果类似这样:
查看此 XML 文件
,查看此 XSL 文件
,并查看结果
。
<xsl:sort> 元素用于对结果进行排序。
在何处放置排序信息
如需对结果进行排序,只要简单地在 XSL 文件中的 <xsl:for-each> 元素内部添加一个 <xsl:sort> 元素:<?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>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> [code]<xsl:sort select="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>[/code]
注释:
select
属性指示需要排序的 XML 元素。
上面的转换结果类似这样:
查看此 XML 文件
,查看此 XSL 文件
,并查看结果
。
<xsl:if> 元素用于放置针对 XML 文件内容的条件测试。
<xsl:if> 元素
如需放置针对 XML 文件内容的条件测试,请向 XSL 文档添加 <xsl:if> 元素。语法
<xsl:if test="expression "> ... ...如果条件成立则输出... ... </xsl:if>
在何处放置 <xsl:if> 元素
如需添加有条件的测试,请在 XSL 文件中的 <xsl:for-each> 元素内部添加 <xsl:if> 元素:<?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>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> [code]<xsl:if test="price > 10">
<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>[/code]
注释:
必选的 test
属性的值包含了需要求值的表达式。
上面的代码仅仅会输出价格高于 10 的 CD 的 title 和 artist 元素。
上面的转换结果类似这样:
查看此 XML 文件
,查看此 XSL 文件
,查看结果
。
XSLT <xsl:choose> 元素用于结合 <xsl:when> 和 <xsl:otherwise> 来表达多重条件测试。
<xsl:choose> 元素
语法
<xsl:choose> <xsl:when test="expression "> ... 输出 ... </xsl:when> <xsl:otherwise> ... 输出 .... </xsl:otherwise> </xsl:choose>
在何处放置选择条件
要插入针对 XML 文件的多重条件测试,请向 XSL 文件添加 <xsl:choose>、<xsl:when> 以及 <xsl:otherwise>:<?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>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> [code]<xsl:choose> <xsl:when test="price > 10">
<td bgcolor="#ff00ff">
<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>[/code]
上面的代码会在 CD 的价格高于 10 时向 "Artist" 列添加粉色的背景颜色。
上面的转换结果类似这样:
查看此 XML 文件
,查看此 XSL 文件
,查看结果
。
另一个例子
这是另外一个包含两个 <xsl:when> 元素的例子:<?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>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> [code]<xsl:choose> <xsl:when test="price > 10">
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/></td>
</xsl:when> <xsl:when test="price > 9">
<td bgcolor="#cccccc">
<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>[/code]
上面的代码会在 CD 的价格高于 10 时向 "Artist" 列添加粉色的背景颜色,并在 CD 的价格高于 9 且低于等于 10 时向 "Artist" 列添加灰色的背景颜色。
上面的转换结果类似这样:
查看此XML文件
,查看此XSL文件
,查看结果
。
<xsl:apply-templates> 元素
<xsl:apply-templates> 元素可把一个模板应用于当前的元素或者当前元素的子节点。假如我们向 <xsl:apply-templates> 元素添加一个 select 属性,此元素就会仅仅处理与属性值匹配的子元素。我们可以使用 select 属性来规定子节点被处理的顺序。
请看下面的 XSL 样式表:
<?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> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="cd"> <p> <xsl:apply-templates select="title"/> <xsl:apply-templates select="artist"/> </p> </xsl:template> <xsl:template match="title"> Title: <span style="color:#ff0000"> <xsl:value-of select="."/></span> <br /> </xsl:template> <xsl:template match="artist"> Artist: <span style="color:#00ff00"> <xsl:value-of select="."/></span> <br /> </xsl:template> </xsl:stylesheet>
查看此XML文件
,查看此XSL文件
,查看结果
。
相关文章推荐
- 有关XSLT的学习笔记一
- Python学习笔记:元组(tuple)有关内容
- 学习过程中整理的有关centos的一些安装笔记
- 黑马程序员—21—java基础:有关网络编程的学习笔记和学习心得体会
- JAVA学习笔记-----------InetAddress 的有关IP地址的使用案例(杂乱)
- 有关Rating组件的研究——Silverlight学习笔记[41]
- (转)有关Auto encoder 和Denoising auto encoder分别和PCA之间的关系(学习笔记)
- 有关sql的参考资料,学习笔记.
- 黑马程序员—8—Java基础:有关包的学习笔记和学习心得和体会
- PHP学习笔记--有关php中的变量
- 有关AutoCompleteBox组件的研究[1]_基础知识——Silverlight学习笔记[36]
- 有关AutoCompleteBox组件的研究[4]_下拉框内嵌DataGrid与被嵌入DataGrid——Silverlight学习笔记[39]
- PHP学习笔记002——php5.2.6有关fetch_assoc()的bug
- STL笔记(5)条款49:学习破解有关STL的编译器诊断信息
- Android json解析有关内容学习笔记
- 有关Accordion组件的研究——Silverlight学习笔记[27]
- 有关Theme(主题)的研究——Silverlight学习笔记[31]
- XSL学习笔记4 XSLT模式匹配的语法
- 有关ViewBox组件的研究——Silverlight学习笔记[34]
- C++学习笔记—类6-有关继承的一些东西