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)”/>
分享到:
相关推荐
在提供的部分内容中,有一个明显的XSL样式单实例。在这个样式单中,首先定义了一个根模板,匹配了源XML文档的根节点。在根模板中,定义了HTML页面的结构,包括头部(HEAD)、标题(TITLE)和样式(STYLE)。接下来,...
在XML认证教程的这一部分,我们专注于XSL样式单的使用和应用。了解如何正确编写和使用XSLT是提升XML处理能力的关键。通过学习XSLT,你可以创建强大的数据转换工具,不仅可以转换XML结构,还可以结合JavaScript实现更...
jmeter extras里提供了一些xsl样式表,但是不方便看细节,这个样式表转自,可以看细节报告
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 ...
3. XML的显示—XSL样式单(上) 4. XML的显示—XSL样式单(下) 5. XML与HTML的结合(上) 6. XML与HTML的结合(下) 7. 通过DOM操作数据(上) 8. 通过DOM操作数据(下) 9. 客户机与服务器的数据交互(上) 10. 客户机...
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...
通过XSL解析XML在浏览器中显示树的XSL样式表。 处理简便,功能强大,支持拖放,支持键盘操作,每个结点可显示不同的图标,刷新时可以自动记录结点状态,可灵活处理点击动作。 <br>注:本样式表为同步加载模式...
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...
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...
"JSON解析xml 带xsl样式"这个主题涉及到的是如何使用JSON处理XML数据,并结合XSL(eXtensible Stylesheet Language)来展示和转换这些数据。XSL是一种样式表语言,用于转换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属性....
6. **样式表结构**:探讨如何组织XSL样式表,包括导入和包含其他样式表的机制。 7. **转换过程**:阐述XML到HTML、SVG或其他格式的转换流程,以及如何控制输出结果的样式和布局。 8. **实际应用**:通过实例演示...
当宿主样式表中有匹配规则时,`<xsl:apply-imports>` 会先调用导入的样式表中的对应模板,然后才执行宿主样式表中的模板。这在XSLT中提供了一种优先级的概念,即导入的样式表模板优先于宿主样式表中的同名模板。 **...
它通过应用XSL样式表来定义拆分规则,将XML数据分割成易于管理和处理的小块。 XML(eXtensible Markup Language)是一种标记语言,常用于存储和传输结构化数据。XSL则是一种用于转换XML文档的样式表语言,它可以...
主要实现了基于XML的同学录,根据XML文档,用DTD检验及保证其有效性,使其结构完整良好,编写xsl文档,使其按照规定的样表显示,并运用XPath、Xlink、Xpointer等实现向HTML的转换,最后显示在浏览器上。直观,简单,...
清单2展示了如何在DocBook XSL样式表中添加调试消息,以确定转换无效的原因: 清单2: ```xml <xsl:choose> <xsl:when test="caption"> <xsl:message>CAPTION!</xsl:message> <!-- ... --> </xsl:when> <!-- ...
XSL元素是XSL样式表的基本构建块,它们定义了如何转换XML文档。常见的XSL元素包括模板(`<xsl:template>`),用于定义如何处理XML节点;选择器(`<xsl:apply-templates>`),用于应用模板到XML文档的特定部分;变量...