xsl模板学习笔记

好久没有学习了。这是最近接触的一些模板学习笔记。

xsl是将xml转化为HTML的一种模板。通过XPath来获取xml的节点路径等信息。工作原理为:使用XPath来匹配xml中定义的部分,找到之后将该部分转化为指定的结果文档。

直接进入主题:

stylesheet元素以及transform元素

类似于HTML文件一样,需要对文档进行声明,其中以下两种方式均可:代码如下:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

或者:

<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

由于实例会涉及到xml文档内容,将以以下xml文档为例进行描述:

<DOCUMENT>
    <docid>xml001</docid>
    <item>
        <key>xmlshili</key>
        <classId>xsl001</classId>
        <display doc_num="3" total_num="3">
            <name annotation="1">
                <![CDATA[gjw]]>
            </name>
            <subitem index_level="1">
                <key>性别</key>
                <value></value>
            </subitem>
            <subitem>
                <key>年龄</key>
                <value>23</value>
            </subitem>
            <subitem>
                <key>爱好</key>
                <value></value>
            </subitem>
        </display>
        <type>xml</type>
    </item>
</DOCUMENT>

template元素

该元素用于声明一个模板,其所包含的属性有:
name:为模板定义名称,可选属性(若省略该属性,则match为必选);
match:该模板的匹配模式,可选属性(若省略该属性,则name为必选);
mode:为模板规定模式,可选属性;
priority:用于表示模板的优先级,可选属性。
该元素实例如下代码所示:

<xsl:template name="css">
<xsl:template mode="big"><link href="http://www.123456.com/gjw/xmlshili.css" rel="stylesheet" type="text/css" /></xsl:template>
<link href="http://www.123456.com/gjw/shili.css" rel="stylesheet" type="text/css" />
</xsl:template>

上面所声明的template模块,可通过apply-templatescall-template来展示。

apply-templates元素

该元素用于将先前声明的template模块以及当前模板的子节点进行展示,其包含两个属性:
select:可选属性,选择想要选中的节点;
mode:可选属性,通过声明的mode进行区分节点。
例如:

<xsl:template name="message">
<h1><xsl:apply-templates select="css" mode="big"/></h1>
</xsl:template>

上述代码展示了属于messagemode为“big”的css子节点

call-template元素

该元素指的是调用指定的模板,其包含一个必选属性:
name:必选属性,指定被调用的模板名称。
实例代码如下所示:

<xsl:call-template name="css"/>

import元素

该元素用于把外部的样式引入进来,包含属性为:
href:必选参数,用于指定导入样式的URL路径。

apply-imports元素

该元素用于应用所导入的样式表中的模板规则。但是导入样式表中的模版规则的优先级要比主样式表中的模版规则要低。
实例代码例如:

<xsl:import href="common.xsl"/>//上文中的css模板文件名
<xsl:template match="css">
<head>
<xsl:apply-imports/>
</head>
</xsl:template>

代码导入了外部样式的样式文件,并应用于文件中。

attribute元素

该元素用于向标签添加属性,其包括两个属性:
name:必选属性,规定属性的名称;
namespace:可选属性,规定属性的命名空间的URI。

attribute-set元素

该元素可为标签定义多个属性值,其包括两个属性:
name:必选属性,规定属性集的名称;
use-attribute-sets:在属性集中引用其他属性集,由空格分隔。
实例代码如下所示:

<a>
<xsl:attribute-set name="att">
<xsl:attribute name="style">display:block</xsl:attribute>
<xsl:attribute name="href">www.123456.com</xsl:attribute>
<xsl:attribute name="id">myA</xsl:attribute>
</xsl:attribute-set>
</a>

代码为a标签添加了style、href以及id属性。

variable元素

该元素用于声明变量,其包含两个属性:
name:必选属性,规定变量的名称;
select:可选参数,定义变量的值,若不选则为空字符串。
实例代码如下:

<xsl:variable name="classid" select="/DOCUMENT/item/classid" />

代码定义了变量classid的值为xml文档中的classid

value-of元素

该元素返回节点的值,输出到页面中,其包含两个属性,为:
select:必选参数,规定获取值的路径;
disable-output-escaping:可选,若值为“yes”,则输出时不会将结果进行转义,若值为“no”,则“<”输出结果为“&lt”。默认值为“no”。
实例代码如下:

<a>
<xsl:attribute-set name="att">
<xsl:attribute name="id"> <xsl:value-of select="$classid" /></xsl:attribute>
</xsl:attribute-set>
</a>

代码运用了之前的一些元素,a标签中的id则是采用了先前<xsl:variable>元素声明的变量,直接采用$classid即可获取其变量值。

choose元素、when元素以及otherwise元素

<xsl:choose>元素与<xsl:when>元素以及<xsl:otherwise>元素协同使用,类似于其他语言中的switch结构。
when里的条件满足是,则执行when结构里的代码;
若所以的when都不满足条件,则执行otherwise里的内容;
若没有otherwise,则不执行内容。
实例代码如下:

<xsl:choose>
<xsl:when test="/DOCUMENT/item/key != ''">
<xsl:value-of select="/DOCUMENT/item/key " />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="/DOCUMENT/item/classid" />
</xsl:otherwise>
</xsl:choose>

上述代码判断xml中的key是否为空,若不为空则返回,若为空则返回classid里的内容。

if元素

该元素用于在条件成立的情况下执行模板,其包含一个属性:
test:必选属性,用于判断条件。
实例代码如下:

<xsl:if test="/DOCUMENT/item/key != ''">
<xsl:value-of select="/DOCUMENT/item/key " />
</xsl:if>

for-each元素

该元素用于遍历指定节点中的每个元素,其包含一个属性:
select:必选属性,用于指定要处理的节点集合。
实例代码如下:

<xsl:for-each select="/DOCUMENT/item/display/subitem">
<p><xsl:value-of select="key" />:<xsl:value-of select="value" /></p>
</xsl:for-each>

上述代码输出xml中的每个subitem中的key值和value值。可以通过条件筛选进行选择要展示的遍历结果,其代码如下:

<xsl:for-each select="/DOCUMENT/item/display/subitem[value != “”]">
<p><xsl:value-of select="key" />:<xsl:value-of select="value" /></p>
</xsl:for-each>

上述代码遍历subitem,选择其中value不为空的节点进行输出。


学习还在继续,还请各路大神多多指正~

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GJWeigege

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值