出处:http://www.cnblogs.com/ygcao/archive/2010/05/23/1742247.html
匹配模式
1.匹配根节点
<xsl:template match="/">
<html>
<xsl:apply-templates/>
</html>
</xsl:template>
2.匹配元素名
<xsl:template match="films">
<html>
<xsl:apply-templates/>
</html>
</xsl:template>
3.匹配子节点
<xsl:template match="file/name">
<p>
<xsl:value-of select="."/>
</p>
</xsl:template>
除了使用“/”,还可以使用“*”来匹配任意元素。在下面的程序中匹配了“film”元素的所有子节点的“name”元素。
<xsl:template match="film/*/name">
<p>
<xsl:value-of select="."/>
</p>
</xsl:template>
4.匹配元素后代
<xsl:template match="film//name">
<p>
<xsl:value-of select="."/>
</p>
</xsl:template>
在程序中指定的“film//name”, 包括了“film/name”,“film/*/name”,“film/*/*/name”等各种情况。对于选择给定类型的所有元素而不管这些元素是不是直系子孙时,这种方法会特别的有效。
5.匹配属性
<xsl:template match="films/film">
<p>
<xsl:value-of select="@country"/>
</p>
</xsl:template>
匹配属性的机制和匹配元素的机制十分的类似,只是多了一个“@”符号而已。
就像使用“*”来选择一个元素的所有属性,例如,“film/@*”表示选择“film”元素的所有属性。
6.通过ID匹配
<xsl:template match="id('A101')">
<p>
<xsl:value-of select="."/>
</p>
</xsl:template>
7.匹配文本节点
<xsl:template match="name">
<xsl:value-of select="text()"/>
</xsl:template>
XSL缺省规则规定,如果没有规则用于处理这一个文本节点,这个节点的文本将直接被输出,可以使用text()来推翻这一个缺省规则,让处理器对文本节点什么都不做。如下所示:
<xsl:template match="text()">
</xsl:template>
8.匹配注释
使用comment()来选择注释,例如:
<?xml version="1.0" encoding="gb2312"?>
<film>
<!--目前只有VCD版, DVD版还未上市-->
<name>拯救大兵瑞恩</name>
<director>施皮尔伯格</director>
</film>
<!--xsl-->
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3g.org/1999/XSL/Transform">
<xsl:template match="film">
<xsl:apply-templates select="comment()"/>
<xsl:value-of select="name"/>
<xsl:value-of select="director"/>
</xsl:template>
<xsl:template>
<xsl:comment>
<xsl:value-of select="."/>
</xsl:comment>
</xsl:template>
9.匹配操作指令
使用processing-instruction()来匹配操作指令,缩写为“pi()”,有时想要将样式单附加到另一个文档上,这是“pi()”就可以派上用场。
<xsl:template match="/pi()">
<xsl:pi name="xml-stylesheet">
<xsl:value-of select="."/>
</xsl:pi>
</xsl:template>
10.使用“或”操作符
在处理多个节点时,使用“或”操作符可以匹配多种可能的模式。
<xsl:template match="name|director">
<xsl:value-of select=".">
</xsl:template>
程序中同时选择了“name”和“director”2个元素,并对他们使用同样的规则。
实例:
xml
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="MyFirstXsl.xslt"?>
<root>
<music date="2010">
<title>传奇</title>
<signer>王菲</signer>
<舞台>
<演员>路人甲</演员>
<代表作>路人甲的代表作</代表作>
</舞台>
<舞台>
<演员>路人乙</演员>
<代表作>路人乙的代表作</代表作>
</舞台>
<lyric>我一直在你身旁,从未走远...</lyric>
<!--在2010年春节联欢晚会上演唱-->
</music>
<music date="2009">
<title>梁祝</title>
<signer>sweety</signer>
<lyric>沉默了七世纪,没放弃逆转这宿命...</lyric>
</music>
<music date="2009">
<title>幸福毛毛虫</title>
<signer>sweety</signer>
<lyric>你的出现改变我原来的想象...</lyric>
<!--很受欢迎-->
</music>
</root>
xslt
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<p align="center">
<font size="7">流行歌曲</font>
</p>
<table width="95%" border="1">
<tr>
<td width="15%">
<div align="center">歌曲</div>
</td>
<td width="10%">
<div align="center">演唱者</div>
</td>
<td width="30%">
<div align="center">伴唱</div>
</td>
<td width="20%">
<div align="center">歌词概览</div>
</td>
<td width="10%">
<div align="center">时间</div>
</td>
<td width="10%">
<div align="center">备注</div>
</td>
</tr>
<xsl:apply-templates/>
</table>
</xsl:template>
<!--注释的匹配规则-->
<xsl:template match="root/music/comment()">
<xsl:value-of select="."/>
</xsl:template>
<!--演唱者的详细介绍-->
<xsl:template match="舞台">
<xsl:value-of select="演员"/>(
<xsl:value-of select="代表作"/>)
<br/>
</xsl:template>
<xsl:template match="root/music">
<tr>
<td>
<div align="center">
<strong>
<font size="5">
<xsl:value-of select="title"/>
</font>
</strong>
</div>
</td>
<td>
<div align="center">
<strong>
<font size="5">
<xsl:value-of select="signer"/>
</font>
</strong>
</div>
</td>
<td>
<div align="center">
<strong>
<font size="5">
<xsl:apply-templates select="舞台"/>
</font>
</strong>
</div>
</td>
<td>
<div align="center">
<strong>
<font size="5">
<xsl:value-of select="lyric"/>
</font>
</strong>
</div>
</td>
<td>
<div align="center">
<strong>
<font size="5">
<xsl:value-of select="@date"/>
</font>
</strong>
</div>
</td>
<!--匹配注释-->
<td>
<div align="center">
<strong>
<font size="5">
<xsl:apply-templates select="comment()"/>
</font>
</strong>
</div>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
显示效果: