XSL学习笔记3 XSLT的模板规则<xsl:value-of>和<xsl:for-each>
1、<xsl:value-of>元素
<xsl:value-of>元素是选择当前节点的值,用于在结果树中创建一个文本节点。例如<xsl:value-of select="Name" />就是选择Name节点的值。
<xsl:value-of>元素是选择当前节点的值,用于在结果树中创建一个文本节点。例如<xsl:value-of select="Name" />就是选择Name节点的值。
select属性是必须的,用于指定要计算的表达式,表达式计算的结果将被转换为一个字符串值。如果字符串为空,那么文本节点将不会被创建。
注意,每个xsl文件都需要导入xsl的命名空间,
[url]http://www.w3.org/TR/WD-xsl[/url],例如在xml头声明之后加入:<p xmlns:xsl="
[url]http://www.w3.org/TR/WD-xsl[/url]">
2、<xsl:for-each>元素
<xsl:for-each>元素逐个(select)选择某条件,应用条件。select属性是必须的,用于指定一个表达式,该表达式计算结果必须是一个节点集。<xsl:for-each>元素的内容是一个模板,对于每一个被选择的节点,实例化该模板。
<xsl:for-each>元素逐个(select)选择某条件,应用条件。select属性是必须的,用于指定一个表达式,该表达式计算结果必须是一个节点集。<xsl:for-each>元素的内容是一个模板,对于每一个被选择的节点,实例化该模板。
for-each还支持排序,order-by语句,它的语法是以分号(;)分隔、作为排序标准的列表。在列表元素前添加加号(+)表示按此标记的内容以升序排序,添加减号(-)表示逆序排序。作为一种简化的表示就是,排序标准列表就是由select规定的标记的子标记的序列,每个标记之间以(;)分隔。
employee.xml
<?
xml
version
="1.0"
encoding
="UTF-8"
?>
<? xml-stylesheet type ="text/xsl" href ="src/employees44.xsl" ?>
< employees >
< employee sn ="E-200402100001" >
< name >zhangsan </ name >
< age >25 </ age >
< monthly_pay mode ="cash" >
1200.00
</ monthly_pay >
</ employee >
< employee sn ="E-200402100006" >
< name >lisi </ name >
< age >28 </ age >
< monthly_pay mode ="cash" >
1600.00
</ monthly_pay >
</ employee >
< employee sn ="E-200503220001" >
< name >wangwu </ name >
< age >30 </ age >
< monthly_pay mode ="credit_card" >
3500.00
</ monthly_pay >
</ employee >
</ employees >
<? xml-stylesheet type ="text/xsl" href ="src/employees44.xsl" ?>
< employees >
< employee sn ="E-200402100001" >
< name >zhangsan </ name >
< age >25 </ age >
< monthly_pay mode ="cash" >
1200.00
</ monthly_pay >
</ employee >
< employee sn ="E-200402100006" >
< name >lisi </ name >
< age >28 </ age >
< monthly_pay mode ="cash" >
1600.00
</ monthly_pay >
</ employee >
< employee sn ="E-200503220001" >
< name >wangwu </ name >
< age >30 </ age >
< monthly_pay mode ="credit_card" >
3500.00
</ monthly_pay >
</ employee >
</ employees >
employee.xsl
<?
xml
version
="1.0"
?>
< xsl:stylesheet version ="1.0" xmlns:xsl ="http://www.w3.org/1999/XSL/Transform" >
< xsl:template match ="/" >
< html >
< head > </ head >
< xsl:apply-templates />
</ html >
</ xsl:template >
< xsl:template match ="employees" >
< body >
< table border ="1" >
< xsl:for-each select ="employee" >
< tr >
< td > < xsl:value-of select ="name" /> </ td >
< td > < xsl:value-of select ="age" /> </ td >
< td > < xsl:value-of select ="monthly_pay" /> </ td >
</ tr >
</ xsl:for-each >
</ table >
</ body >
</ xsl:template >
</ xsl:stylesheet >
< xsl:stylesheet version ="1.0" xmlns:xsl ="http://www.w3.org/1999/XSL/Transform" >
< xsl:template match ="/" >
< html >
< head > </ head >
< xsl:apply-templates />
</ html >
</ xsl:template >
< xsl:template match ="employees" >
< body >
< table border ="1" >
< xsl:for-each select ="employee" >
< tr >
< td > < xsl:value-of select ="name" /> </ td >
< td > < xsl:value-of select ="age" /> </ td >
< td > < xsl:value-of select ="monthly_pay" /> </ td >
</ tr >
</ xsl:for-each >
</ table >
</ body >
</ xsl:template >
</ xsl:stylesheet >
通过xslt处理器转换为html结果为:
<
html
>
< head >
< META http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
</head>
< body >
< table border ="1" >
< tr >
< td >zhangsan </td>
< td >25 </td>
< td >1200.00 </td>
</tr>
< tr >
< td >lisi </td>
< td >28 </td>
< td >1600.00 </td>
</tr>
< tr >
< td >wangwu </td>
< td >30 </td>
< td >3500.00 </td>
</tr>
</table>
</body>
</html>
< head >
< META http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
</head>
< body >
< table border ="1" >
< tr >
< td >zhangsan </td>
< td >25 </td>
< td >1200.00 </td>
</tr>
< tr >
< td >lisi </td>
< td >28 </td>
< td >1600.00 </td>
</tr>
< tr >
< td >wangwu </td>
< td >30 </td>
< td >3500.00 </td>
</tr>
</table>
</body>
</html>