XSL中template的match属性匹配模式

2023-11-02

出处: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>
显示效果:




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XSL中template的match属性匹配模式 的相关文章

随机推荐