什么是XSL

XSL(EXtensible Stylesheet Language)它是指可扩展样式表语言。 XSL之于 XML 就像 CSS 之于 HTML。说白了就是将XML中的数据用指定的显示格式输出.XML不像HTML,它不包含任何显示格式的信息.XSL 包含两个部分:

XSLT – 用于转换 XML 文档的语言. XSLT 是指 XSL 转换 (XSL Transformation) XPath – 用于在 XML 文档中导航的语言 

XSL 语法任何 XSL 文档的第一行实际上都是 XML 声明:

<?xml version="1.0" encoding="GB2312"?>

XSL 与 XML ?遵循相同的语法规则

在 XML 声明之后,就是 XSL 声明,例如:

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

......

</xsl:stylesheet>

XSL声明必须要有结束标签,上面的声明中还包含命名空间和 XSL 规范的版本。

什么是命名空间

它指定一组可以在特定文档中使用的元素名称和属性名称。命名空间的作用是避免命名冲突。由于 XML 和其它与 XML 相关的语言都是用户定义的,所以可能出现命名冲突。<table>可能是指一个布局或是一个座位。由于大多数应用程序同时处理多个 XML 文档,因此经常会有不同 XML 文档相混合的情况,而在这些文档中某个元素可能代表不同的含义。几个文档使用相同的命名空间可以确保元素在每个文档中代表相同含义。否则,就应该使用不同的命名空间确保元素代表不同的含义。

命名空间由文档声明中的 xmlns 属性指定,实际上就是网站的地址(例如 http://www.w3.org/1999/XSL/Transform)。其基本原理是 URI 具有唯一性,因此相应的命名空间也是唯一的。文档声明中的 URI 仅用作名称。

模板或规则

XSL 文档是由模板或规则构成,每个模板定义应用于特定 XML 节点的规则。XSL 模板如下所示:

<xsl:template match="/">......</xsl:template>模板的作用是用来承载XML文档中的数据的,就像一个模具,如果这个模具是方形的,那么用这个模具做出来的模型也一定是方形的,而XML文档中的数据就是用来真充模具的原料。实际上在模板中可以嵌套子模板,但最上层模板必须将match设为"/"。

happyold.xml

<?xml version="1.0" encoding="GB2312"?>

<俱乐部>

<会员>

<姓名>cnbruce </姓名>

<年龄>10 </年龄>

<性别>男 </性别>

<描述>他是一个糟糕的家伙!</描述>

</会员>

<会员>

<姓名>yufuzi</姓名>

<年龄>80 </年龄>

<性别>男 </性别>

<描述>他是一个优秀的男人!</描述> 

</会员>

<会员>

<姓名>xiaojin</姓名>

<年龄>20 </年龄>

<性别>男 </性别>

<描述>他人品有问题!</描述> 

</会员>

</俱乐部>

循环构造

<xsl:for-each select="...">......</xsl:for-each>与典型的 for 循环作用相同。

old.xsl

<?xml version="1.0" encoding="GB2312"?>

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

<xsl:template match="/">

<table border="1">

<tr>

<th>姓名</th>

<th>年龄</th>

<th>性别</th>

<th>描述</th>

</tr>

<xsl:for-each select="俱乐部/会员">

<tr>

<!--表达式为何不需要包括父节点或从文档根开始。这是因为这些元素的路径是根据 <xsl:for-each> 构造中的 XPath 表达式来计算的-->

<td><xsl:value-of select="姓名"/></td>

<td><xsl:value-of select="年龄"/></td>

<td><xsl:value-of select="性别"/></td>

<td><xsl:value-of select="描述"/></td>

</tr>

</xsl:for-each>

</table>

</xsl:template>

</xsl:stylesheet>

将old.xsl与happyold.xml放到同一文件夹下,然后在happyold.xml第二行插队入

<?xml-stylesheet type="text/xsl" href="old.xsl"?>然后在浏览器中预览一下显示结果。

使用循环构造,还可以根据条件过滤输出。假设只想显示会员中年龄大于30的会员。

old30.xsl

<?xml version="1.0" encoding="GB2312"?>

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

<xsl:template match="/">

<table border="1">

<tr>

<th>姓名</th>

<th>年龄</th>

<th>性别</th>

<th>描述</th>

</tr>

<xsl:for-each select="俱乐部/会员[年龄>30]">

<tr>

<td><xsl:value-of select="姓名"/></td>

<td><xsl:value-of select="年龄"/></td>

<td><xsl:value-of select="性别"/></td>

<td><xsl:value-of select="描述"/></td>

</tr>

</xsl:for-each>

</table>

</xsl:template>

</xsl:stylesheet>

要定义 XML 节点的条件,可以使用下列任何运算符:

等于 (=) 

不等于 (!=)

小于 (<)

小于或等于 (<=) 

大于 (>) 

大于或等于 (>=) 

使用<xsl:sort / >构造使输出的结果按指定的节点进行排序,<xsl:sort /> 元素必须嵌套在 <xsl:for-each > 元素中,以确保应用程序可以循环通过所有的项目。sort 元素没有相应的结束标签,所以在其结尾加上"/"使其自结束。

old_sort.xsl

<?xml version="1.0" encoding="GB2312"?>

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

<xsl:template match="/">

<table border="1">

<tr>

<th>姓名</th>

<th>年龄</th>

<th>性别</th>

<th>描述</th>

</tr>

<xsl:for-each select="俱乐部/会员">

<xsl:sort select="年龄" order="descending"/>

<tr>

<td><xsl:value-of select="姓名"/></td>

<td><xsl:value-of select="年龄"/></td>

<td><xsl:value-of select="性别"/></td>

<td><xsl:value-of select="描述"/></td>

</tr>

</xsl:for-each>

</table>

</xsl:template>

</xsl:stylesheet>

去掉order="descending"再看看显示结果。

条件构造:

<xsl:choose>

<xsl:when test="表达式">

</xsl:when>

<xsl:otherwise>

</xsl:otherwise>

</xsl:choose>

条件构造中可以有多个when,但只能有一个otherwise,用于处理未包括在初始测试条件中的所有其它情况.

old_choose.xsl

<?xml version="1.0" encoding="GB2312"?>

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

<xsl:template match="/">

<table border="1">

<tr>

<th>姓名</th>

<th>年龄</th>

<th>性别</th>

<th>描述</th>

</tr>

<xsl:for-each select="俱乐部/会员">

<xsl:choose>

<xsl:when test="年龄 > 70">

<tr bgcolor="#66CCFF">

<td><xsl:value-of select="姓名"/></td>

<td><xsl:value-of select="年龄"/></td>

<td><xsl:value-of select="性别"/></td>

<td><xsl:value-of select="描述"/></td>

</tr>

</xsl:when>

<xsl:when test="年龄=10">

<tr bgcolor="blue">

<td><xsl:value-of select="姓名"/></td>

<td><xsl:value-of select="年龄"/></td>

<td><xsl:value-of select="性别"/></td>

<td><xsl:value-of select="描述"/></td>

</tr>

</xsl:when>

<xsl:otherwise>

<tr bgcolor="red">

<td><xsl:value-of select="姓名"/></td>

<td><xsl:value-of select="年龄"/></td>

<td><xsl:value-of select="性别"/></td>

<td><xsl:value-of select="描述"/></td>

</tr>

</xsl:otherwise>

</xsl:choose>

</xsl:for-each>

</table>

</xsl:template>

</xsl:stylesheet>

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

触发修改文章时间【fastadmincms开发记录】|fastadmincms二次开发,触发,修改,文章,时间,fastadmin,ms,开发,记录
触发修改文章时间【fastadmincms开发记录】
在tp5中过滤输入的零宽度字符【fastadmincms开发记录】|fastadmincms二次开发,在tp5中,过滤,输入,的零,宽度,字符,fastadmin,ms,开发,记录
在tp5中过滤输入的零宽度字符【fastadmincms开发记录】
处理tag标签中的0宽空格【fastadmincms开发记录】|fastadmincms二次开发,处理,tag,标签,中的,0宽,空格,fastadmin,ms,开发,记录
处理tag标签中的0宽空格【fastadmincms开发记录】
添加专题时tags标签id出错【fastadmincms开发记录】|fastadmincms二次开发,添加,专题,时tags,标签,id,出错,fastadmin,ms,开发,记录
添加专题时tags标签id出错【fastadmincms开发记录】
20230518----模板 广告【fastadmincms开发记录】|fastadmincms二次开发,20230518,模板,广告,fastadmin,ms,开发,记录
20230518----模板 广告【fastadmincms开发记录】
cms添加视频模型【fastadmincms开发记录】|fastadmincms二次开发,ms,添加,视频,模型,fastadmin,开发,记录
cms添加视频模型【fastadmincms开发记录】
新增单篇收费复制功能【fastadmincms开发记录】|fastadmincms二次开发,新增,单篇,收费,复制,功能,fastadmin,ms,开发,记录
新增单篇收费复制功能【fastadmincms开发记录】
添加开会员折扣功能【fastadmincms开发记录】|fastadmincms二次开发,添加,开会,折扣,功能,fastadmin,ms,开发,记录
添加开会员折扣功能【fastadmincms开发记录】

历史上的今天:05月03日

热门专题

云南综合高中|云南综合高中
云南综合高中
云南高职单招|云南单招,云南单招网,云南高职单招网,云南高职单招,云南单招学校,云南单招培训
云南高职单招
易捷尔高职单招|易捷尔高职单招,易捷尔高职单招培训,单招分数线,单招录取分数线,高职单招学校分数线
易捷尔高职单招
自考本科|自考本科有用吗,自考文凭,自考本科文凭,自考文凭有用吗,自考本科文凭有用吗,自考文凭承认吗
自考本科
安徽中源管业有限公司|安徽中源管业有限公司,安徽中源管业有限公司介绍,安徽中源管业有限公司电话,安徽中源管业有限公司地址,安徽中源管业有限公司厂家,安徽中源管业有限公司电力管,安徽中源管业有限公司管材
安徽中源管业有限公司
天麻的功效与作用吃法|天麻的功效与作用,天麻的功效与作用吃法,天麻炖什么治头痛最好,天麻的功效与作用禁忌,天麻多少钱一斤,天麻的功效与作用吃法及禁忌,天麻怎么吃效果最好,天麻粉的功效与作用,天麻怎么吃
天麻的功效与作用吃法
云南开放大学|云南开放大学报名,云南开放大学报考,云南开放大学,什么是云南开放大学,云南开放大学学历,云南开放大学学费,云南开放大学报名条件,云南开放大学报名时间,云南开放大学学历,云南开放大学专业
云南开放大学
易捷尔单招|易捷尔单招,易捷尔单招培训,易捷尔单招报名,易捷尔单招考试,易捷尔单招培训学校,易捷尔单招分数
易捷尔单招

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部