什么是 XSL?在什么情况下应该使用它?
XSL 之于 XML 就像 CSS 之于 HTML。它是指可扩展样式表语言 (EXtensible Stylesheet Language)。这是一种用于以可读格式呈现 XML 数据的语言。XSL 实际上包含两个部分:
- XSLT – 用于转换 XML 文档的语言
- XPath – 用于在 XML 文档中导航的语言
XSLT 是指 XSL 转换 (XSL Transformation),它是 XSL 最重要的部分。
XSLT 可以将 XML 文档转换为其它 XML 文档、XHTML 输出或简单的文本。这通常是通过将每个 XML 元素转换为 HTML 元素来完成的。由于 XML 标签是用户定义的,浏览器不知道如何解释或呈现每个标签,因此必须使用 XSL。XML 标签的意义是为了方便用户(而不是计算机)理解。
XSLT 还可以对 XML 树进行下列操作:
- 添加和删除元素
- 添加和删除属性
- 对元素进行重新排列或排序
- 隐藏或显示某些元素
- 查找或选择特定元素
XSL 是否与 XML 相同?
既是又不是。说是,是因为它们遵循相同的语法规则(只有少许差异,下面我将会讲到)。说不是,是因为它们的用途不同:XML 用于承载数据,而 XSL 则用于设置数据的格式。XSL 声明与 XML 声明的不同之处在于,XML 声明只写一行,而且没有结束标签,而 XSL 声明必须包含结束标签。
在什么情况下应该使用 XSL?
XSL 在设计时有几个目标用途,这些用途使它成为某些开发情况下的完美解决方案,而对另一些开发情况则毫无用处。
- XSL 专门用于处理 XML 文档,并且遵循 XML 语法。因此,它只能在支持 XML 的应用程序中与 XML 结合使用。最合适使用 XML 和 XSL 的情况是:Web 门户、新闻聚合器、社区网站或其它任何需要向各种设备及大量客户端提供信息的 Web 应用程序。
- XSLT 是一种基于模式匹配的语言。它会查找匹配特定条件的节点,然后应用相应的规则。因此,它不具备大多数编程语言的计算能力。例如,XSL 无法在运行时更改变量的值。它不应该用于从使用复杂公式的动态数据源(例如在线商店)来计算值。Web 编程语言更适于此用途。
- XSL 不能代替或补充 CSS。它不应(也不能)用于设置 HTML 的样式。但是,您可以将其用于需要频繁重新设计可视化效果、频繁更换布局以及以灵活格式处理数据的网站。
- XSL 不是内容管理工具。它不应(也不能)用于更改 XML 文档的内容或者编辑信息。但是,您可以将 XML 和 XSL 用于需要处理几种不同格式文档的内容管理系统。
服务器端与客户端
服务器端转换工作流程如下图所示:
客户端 XSL 转换的工作流程:
什么是 XPath?
XSL 使用 XPath 来标识 XML 树中需要处理的各个元素。
XPath 规范基本上遵循与文件系统寻址相同的规则:
- 如果 XPath 表达式以斜杠 (/) 开头,代表的是 XML 元素的绝对路径(从 XML 文档的根开始)。
- 如果 XPath 表达式以双斜杠 (//) 开头,则会选择当前文档中符合指定条件的所有元素,而不考虑它们在 XML 文档中的位置。例如,
//employee
会查找 XML 文档中的所有员工节点。
- 星号 (*) 会选择由前面的路径定位的所有 XML 元素。例如,
/company/department/*
选择一个部门的所有子节点,即该部门的所有员工。
- 点 (.) 选择当前的节点,两个点 (..) 选择父节点。例如,用于选择某个员工所在的部门的 XPath 表达式就是
../employee
。
- 要选择属性,请使用
@
字符。例如,/company/department/employee[@retired]
选择指定了 retired
属性的所有员工。
过滤项目
使用 <xsl:for-each>
构造,您还可以根据条件过滤输出。假设您只想显示雇员中的程序员。
<xsl:template match="/">
<table border="1">
<tr>
<th>Name</th>
<th>Job</th>
<th>Salary</th>
</tr>
<xsl:for-each select="company/department/employee[job='Programmer']">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="job"/></td>
<td><xsl:value-of select="salary"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
要定义 XML 节点的条件,可以使用下列任何运算符:
- 等于 (=)
- 不等于 (!=)例如,name!='Ben Walker'
- 小于 (<)例如,salary<2750
- 小于或等于 (<=)
- 大于 (>)
- 大于或等于 (>=)
对项目进行排序
可以将项目按字母顺序排列。只需使用 <xsl:sort />
构造,并指定按哪个节点进行排序。<xsl:sort />
元素必须嵌套在 <xsl:for-each>
元素中,以确保应用程序可以循环通过所有的项目。使用下面的代码可以按字母顺序显示员工:
<xsl:template match="/">
<table border="1">
<tr>
<th>Name</th>
<th>Job</th>
<th>Salary</th>
</tr>
<xsl:for-each select="company/department/employee">
<xsl:sort select="name" />
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="job"/></td>
<td><xsl:value-of select="salary"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
当然,您只需在 <xsl:sort />
元素中额外添加一个属性,即可方便地在升序和降序排列顺序之间切换:
<xsl:sort select="/name" order="descending"/>
单一条件和多个条件
在大多数语言中,XSL 还能够根据条件显示内容。
单一条件是使用下面的语法定义的:
<xsl:if test="表达式">
</xsl:if>
要对多个项目运行条件测试,以便只显示满足该条件的项目,需要将 xsl:if
构造嵌套在 xsl:for-each
元素中。下面的示例显示了如何只列出薪金高于 2700 元的员工:
<xsl:template match="/">
<table border="1">
<tr>
<th>Name</th>
<th>Job</th>
<th>Salary</th>
</tr>
<xsl:for-each select="company/department/employee">
<xsl:if test="salary > 2700">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="job"/></td>
<td><xsl:value-of select="salary"/></td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</xsl:template>
请注意,小于 (<) 和大于 (>) 符号由它们相应的 HTML 转义序列(< 和 >)代替。否则,它们很容易与标签的开头和结尾混淆。
在测试表达式中可以使用常用的条件运算符:
- <(小于)
- >(大于)
- =(等于)
- !=(不等于)
如果需要将某个值与某个字符串进行比较,则要将字符串放在单引号中(例如 <xsl:if test="job = 'Software Analyst'">
)。
象大多数编程语言中的 IF-ELSE 构造一样,您还可以定义更复杂的条件。所使用的语法一看就能明白:
<xsl:choose>
<xsl:when test="表达式">
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
为了在多个 XML 节点上测试条件,<xsl:choose>
构造必须嵌套在 <xsl:for-each>
循环中。
假设您要以绿色高亮显示薪金低于 2700 元的所有员工,以蓝色高亮显示薪金高于 2700 元的所有员工:
<xsl:template match="/">
<table border="1">
<tr>
<th>Name</th>
<th>Job</th>
<th>Salary</th>
</tr>
<xsl:for-each select="company/department/employee">
<xsl:choose>
<xsl:when test="salary > 2700">
<tr bgcolor="#66CCFF">
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="job"/></td>
<td><xsl:value-of select="salary"/></td>
</tr>
</xsl:when>
<xsl:otherwise>
<tr bgcolor="#00CC99">
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="job"/></td>
<td><xsl:value-of select="salary"/></td>
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</table>
</xsl:template>
<xsl:otherwise>
元素指定的是当 XML 节点不满足初始测试条件时默认应用的规则。
分享到:
相关推荐
XML,全称Extensible Markup Language,可扩展标记语言,是一种用于标记数据的结构化语言,...通过这些学习资料,你将能够深入理解XML的各个方面,从基础语法到高级用法,从而在实际工作中更有效地处理和利用XML数据。
XSL(Extensible ...对于初学者来说,从理解基本概念和语法开始,然后逐步实践,通过创建简单的转换项目来加深理解,是学习XSL的有效途径。记住,实践是最好的老师,不断尝试和改进,你将在XSL的世界中游刃有余。
### XSL 学习知识点详解 #### 一、XSL 概述 XSL(Extensible Stylesheet Language,可扩展样式表语言)是一种用于控制 XML 数据呈现方式的标准语言。类似于 CSS 对于 HTML 的作用,XSL 使得 XML 数据能够按照预定义...
压缩包内的文件“XSL(一)”可能是第一部分的学习资料,可能包含了一些基础的XSLT教程,例如解释XSLT的工作原理,展示如何创建基本的模板,以及演示如何使用XSLT进行简单的XML到HTML的转换。这些内容对于初学者来说...
**XSL学习资料** XSL(Extensible Stylesheet Language)是一种强大的XML(eXtensible Markup Language)转换语言,主要用于将XML数据转换成其他格式,如HTML、PDF或纯文本,以便于显示或打印。本学习资料包针对...
《精通XML——基础概念、核心技术与典型案例》书中所带光盘的各章例程以及数据库 第1章:XML的特征及应用场合简介 第2章:XML语法 第3章:XML名称空间 第4章:XML数据结构 第5章:XML路径查询技术 第6章:应用:...
【描述】虽然描述部分为空,但我们可以推断博主可能分享了一篇关于XSL学习的文章,提供了深入理解XSL的资源和实践指导。通过博文链接(已省略)读者可以获取更详细的教程和讨论。 【标签】"源码"和"工具"表明这个...
综上所述,XSL开发基础参考资料涵盖了XSL函数、XSL元素、XPath和XSL知识速查的关键内容。通过深入学习和实践这些知识,开发者能够有效地处理XML数据,实现XML文档的灵活转换和呈现。阅读提供的PDF文件,如"XSL元素....
### XSL基础教程知识点 #### 一、XSL与XML的关系 XSL(Extensible Stylesheet Language,可扩展样式表语言)是一种用于控制XML文档显示的标记语言。它主要用于将XML文档转换为其他格式,例如HTML或PDF。XSL允许...
**XSL-FO基础知识详解** XSL-Format Object (XSL-FO) 是一种XML标记语言,用于将结构化XML数据转换成具有固定布局的可打印或可视化的文档,如PDF、PostScript或HTML。它是XSL(Extensible Stylesheet Language)的...
《XSL语法详解——XML与JSP的交互实践》 XSL(Extensible Stylesheet Language)是一种用于转换XML文档的样式表语言,它为XML数据提供了强大的格式化和转换能力。XSL的主要任务是将XML数据转换成其他形式,如HTML、...
XSL(Extensible Stylesheet Language)是一门强大的样式表语言,用于转换XML(Extensible Markup Language)文档。...从基础概念开始,逐步深入到高级技巧,你将能够充分利用XSL的力量,实现XML数据的灵活转换和呈现。
3.3 XSL转换XML文档——条件过滤 、排序 编写文件名为student2.xsl的XSL文件,其中,用<xsl:sort>对学生信息数据按照专业进行排序,并用<xsl:if>筛选出专业为“计算机”的学生信息。要求显示出的计算机专业的学生...
随着Internet的发展,越来越多的信息进入互联网,信息的交换、检索、保存及再利用等迫切的需求使HTML这种最常用的标记语言已越来越捉襟见肘。HTML将数据内容与表现融为一体,可修改性、数据可检索性差,而XML借鉴了...
【XSL:开启XML的转换之旅】 ...从基础概念到高级技巧,掌握XSL能帮助你更好地驾驭XML世界,实现数据的灵活转换和呈现。无论是新手还是经验丰富的开发者,不断学习和实践XSL都是提升技术能力的关键。
### 学习笔记 学习XSL不仅需要理论知识,还需要实践。通过创建简单的转换开始,然后逐步尝试更复杂的功能,比如条件判断、循环和模板调用。编写并调试XSLT时,理解XPath的表达式是至关重要的。同时,了解如何使用...