`
wind_bell
  • 浏览: 286996 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

xsl样式单

    博客分类:
  • xml
阅读更多
  XML文档的一大特点是可以向多种格式的文档进行转换。比如,从一种逻辑结构的XML向另一种逻辑结构的XML转换,或是转换为可浏览的HTML文档等,由可扩展样式单语言(XSL)完成。
1、转换原理
  把XML文档视为一种树结构,转换的过程就是从源树生成结果树的过程;
  XML样式单定义了:源树和结果树中对应部分的转换规则,每条规则中包含了一个模板,并对应着一种模式;模板定义了转换的结果,而模式则规定了需要进行转换的元素或属性对象。
2、XML中引用XSL的语法格式如下:
<?xml-stylesheet type=“text/xsl” href=“Employees.xsl” ?>
如果在声明部分引用了多个XSL样式单,则只有第一个样式单会生效,其余的都会被忽略掉。
3、XML文档转换步骤
  首先,是根据XML文档构造源树,然后根据XSL规则将源树转换为结果树。目前,这种转换协议已经日趋完善,并从XSL中独立出来,成为W3C正式推荐的标准,称为XSLT(XSL Transformations);
  生成结果树后,就可以对其进行解释,产生一种适合显示、打印或是播放的格式,这一步称为格式化(Formatting)。
  XSL处理器负责实现转换过程。首先,XML文档被解析成DOM树存放在内存中,接着对文档进行分析,每一个DOM树中的节点都会与一个模式相比较,当二者匹配时,就会按照模板中定义的规则进行转换,否则继续往下匹配。如此循环,直至整个文档处理完毕。
4、XSL文档标准格式
<xsl:stylesheet xmlns:xsl=“http://www.w3.org/TR/WD-xsl”>
template rule i
output template
</xsl:stylesheet>
要点:
a、XSL文档本身是格式良好的XML文档,所以在书写时要注意标签的匹配问题;
b、<xsl:stylesheet>既是XSL的声明语句,也是根元素,必须位于文件的首部;
c、通常利用xmlns属性指明XSL的名称空间;
d、样式单中所有的模板规则都由标签<xsl:temlplate>标明;
模板规则可以说明处理的对象(元素/属性)、处理的方式或是转换的结果。此时,我们可以把该标签类似地理解为编程语言中函数的概念。
5、XSL的语法结构
循环判断和条件判断
循环判断:通过<xsl:for-each>元素实现,可选属性包括select和order-by,能够遍历整个结果集合,而不必针对每一条结果都单独书写转换规则。
标准语法格式为:
<xsl:for-each select=“pattern” order-by=“patternlist”>
......
</xsl:for-each>
条件判断:分为if语句和Case语句两种形式
if语句是简单地对条件进行判断,结果为真就执行条件内部的规则,因此可以把if条件与简单的布尔表达式联合使用;
例如:对薪水超过100万元的职员输出“Overpaid employee”信息
<xsl:if match=“.[Salary $gt$ 1000000]”>
Overpaid employee
</xsl:if>
Case语句是对多种情况的分支判断。该语句包括<xsl:choose>、<xsl:when>和<xsl:otherwise>三个元素;
例如:对薪水不足1万元的职员输出“No tax”,对超过5万元的职员输出“High tax rate”,对介于其间的职员输出“Normal tax rate”信息
<xsl:choose>
<xsl:when match=“.[Salary $lt$ 10000]”> 
No tax </xsl:when>
<xsl:when match=“.[Salary $gt$ 50000]”> 
High tax rate </xsl:when>
<xsl:otherwise> Normal tax rate </xsl:otherwise>
</xsl:choose>
6、XSL的模板规则
<xsl:template>标签内的文本内容描述了转换结果的形式,称为输出模板;
属性match的取值把模板规则与指定的元素或属性相比较,只有匹配的DOM节点才会被处理,其余的节点将被忽略;
整个过程中最先匹配的是树的根节点,根节点用“/”表示:
<xsl:template match=“/”>
output template for root element
</xsl:template>
在XSL样式单中必须有一个模板规则与根元素相匹配。
其他节点的配匹,只要在引号中指明要处理的元素对象名称即可:
<xsl:template match=“Employee”>
output template
</xsl:template>
如果在引号中出现的是“*”,那么表示该规则适用于所有的未单独指定处理的元素节点:
<xsl:template match=“*”>
output template
</xsl:template>
很显然,某些树节点在XSL中可能会对应多个模板,在这种情况下,只有最后一个对应模板会生效,前面的模板规则都会被XSL处理器忽略掉。
7、XSL的扩展规则
路径指示符:
●“//”:代表任意深度位置:
  如<xsl:template match=“//Employee”>用来匹配文档中任何位置的<Employee>元素,<xsl:template match=“Employee//Name”>,则表明是匹配<Employee>元素的后继节点中所有<Name>元素。
●“/”:表示直接的父子节点关系;
  如<xsl:template match=“/Employee”>匹配的是<Employee>元素子节点中的<Name>元素。
●“*”:统配符;
●“.”:当前节点指示符;
●“..”:父节点指示符;
●“@”:属性指示符;
过滤匹配符:
对作用对象进行条件过滤或是排序,以进一步调整应用效果。
过滤时,一般是以子元素(或属性)是否存在(或其取值)为标准。
● 子元素存在:即//Employee[Salary]存在,选择含有子元素的所有元素;
● 子元素取值:即Employee[Salary > 25000],选择含有子元素,且Salary取值大于25000的所有元素;
● 属性存在: 即Employee[@ID]存在,选择含有属性的元素;
● 属性取值: 即Employee[@ID =“1234”],选择所有属性ID值为1234的元素。
其他扩展过滤:
●比较操作符:
操作符 功能
$eq$  等于
$ne$  不等
$lt$  小于
$le$  小于或等于
$gt$  大于
$ge$  大于或等于

需要说明的是:表格中的操作符在比较字符时对大小写是敏感的,如果要忽略大小写的不同含义,在每个操作符前面加上前缀字母“i”即可,如“$ieq”。

●布尔操作符:

操作符   功能
$and$   逻辑与
$or$    逻辑或
$not$   取非

●集合索引:

对过滤的结果可以通过集合索引进行再过滤,例如,Employee[Salary][2]就是选择第2个含有子元素的所有元素。
此外,XSL还提供了集合索引函数供用户使用:index方法表示过滤结果的索引号,end方法表示最后一个过滤结果。
Employee[index() $lt$ 2]
Employee[end()]
上述第一个表达式的选择结果是元素的第1和第2个子元素,第二个表达式的选择结果是元素的最后一个子元素。在缺省状态下,模板规则对元素的匹配顺序是按照节点在XML文档中出现的前后次序排定的。
在特定的应用场合中,可能需要对原有的顺序进行调整,此时需要使用order-by属性:
order-by=“number(Salary)”/>








分享到:
评论

相关推荐

    jmeter xsl样式表

    jmeter extras里提供了一些xsl样式表,但是不方便看细节,这个样式表转自,可以看细节报告

    XML认证教程,第 4 部分_ XSL样式单.pdf-综合文档

    XML认证教程,第 4 部分_ XSL样式单.pdf

    XSL基础教程 从 XSLT 样式表调用 JavaScript

    XSL基础教程 从XSLT样式表调用 JavaScript XSLT 是什么类型的语言 XML认证教程,第 4 部分 XSL样式单

    利用XSL和ASP实现XML文档在线编辑

    本文通过一个详细的例子,来阐述了在线编辑XML文档数据的方法。...本文的例子就是利用XSL样式单把XML文档显示出来,供用户进行编辑,然后再把编辑后的数据提交到服务器,在服务器端进行数据的更新。

    XML技术系列讲座.doc

    3. XML的显示—XSL样式单(上) 4. XML的显示—XSL样式单(下) 5. XML与HTML的结合(上) 6. XML与HTML的结合(下) 7. 通过DOM操作数据(上) 8. 通过DOM操作数据(下) 9. 客户机与服务器的数据交互(上) 10. 客户机...

    JSON解析xml 带xsl样式

    JSON解析xml 带xsl样式,有多个实例,可自行学习

    xml实用大全和轻松学习手册和无废话xml

    14.2.5 直接显示带有XSL样式单的XML文件 434 14.3 XSL模板 436 14.3.1 xsl:apply-templates元素 436 14.3.2 select特性 438 14.4 使用xsl:value-of来计算节点值 440 14.5 使用xsl:for-each处理多个元素 442 14.6 ...

    XML实用大全(web开发必备手册)

    5.4.1 XSL样式单模板... 103 5.4.2 文档的主体... 104 5.4.3 标题... 106 5.4.4 联赛、分部和球队... 108 5.4.5 球员... 114 5.4.6 区分投手与击球手... 117 5.4.7 元素内容与select属性... 125 5.4.8 CSS...

    用XML+XSL生成WEB树的XSL样式表

    通过XSL解析XML在浏览器中显示树的XSL样式表。 处理简便,功能强大,支持拖放,支持键盘操作,每个结点可显示不同的图标,刷新时可以自动记录结点状态,可灵活处理点击动作。 &lt;br&gt;注:本样式表为同步加载模式...

    XML实用大全----xml详细参考书

    5.4.1 XSL样式单模板... 103 5.4.2 文档的主体... 104 5.4.3 标题... 106 5.4.4 联赛、分部和球队... 108 5.4.5 球员... 114 5.4.6 区分投手与击球手... 117 5.4.7 元素内容与select属性... 125 5.4.8 CSS...

    XML编程综合资料库

    5.4.1 XSL样式单模板... 103 5.4.2 文档的主体... 104 5.4.3 标题... 106 5.4.4 联赛、分部和球队... 108 5.4.5 球员... 114 5.4.6 区分投手与击球手... 117 5.4.7 元素内容与select属性... 125 5.4.8 CSS...

    XML实用大全

    103 5.4.1 XSL样式单模板... 103 5.4.2 文档的主体... 104 5.4.3 标题... 106 5.4.4 联赛、分部和球队... 108 5.4.5 球员... 114 5.4.6 区分投手与击球手... 117 5.4.7 元素内容与select属性....

    XMl实用大全(资料全易学习)

    14.2.5 直接显示带有XSL样式单的XML文件 434 14.3 XSL模板 436 14.3.1 xsl:apply-templates元素 436 14.3.2 select特性 438 14.4 使用xsl:value-of来计算节点值 440 14.5 使用xsl:for-each处理多个元素 442 14.6 ...

    基于XML的同学录(xsl样式表)

    主要实现了基于XML的同学录,根据XML文档,用DTD检验及保证其有效性,使其结构完整良好,编写xsl文档,使其按照规定的样表显示,并运用XPath、Xlink、Xpointer等实现向HTML的转换,最后显示在浏览器上。直观,简单,...

    rss-xsl:RSS 播客提要的 XSL 样式表

    ERR 的 RSS 播客提要的 XSL 样式表现在,它们将在没有默认 RSS 样式表的浏览器(例如 Chrome)中很好地显示。 只需添加: &lt;?xml-stylesheet type="text/xsl" href="style.xsl"?&gt;到您的 RSS 提要,在&lt;?xml ....

    xml实用教程

    103 5.4.1 XSL样式单模板... 103 5.4.2 文档的主体... 104 5.4.3 标题... 106 5.4.4 联赛、分部和球队... 108 5.4.5 球员... 114 5.4.6 区分投手与击球手... 117 5.4.7 元素内容与select属性....

    Xsl参考(pdf)

    本文主要介绍了XSL标签的用法

    XML与WEB Service技术(微软):实验四 可扩展样式单语言XSL .doc

    XML与WEB Service技术(微软):实验四 可扩展样式单语言XSL .doc

    omml2mml.xsl文件

    为啥下载非要资源分,我想弄0分不可以?这个文件就是安装word之后里边的文件,在word文件夹安装目录下,比如C:\Program Files (x86)\Microsoft Office\root\Office16

Global site tag (gtag.js) - Google Analytics