XSLT知识总结

XSLT基本概念

可扩展样式单语言XSL( eXtensible Stylesheet Language),是由W3C定制的。XSL由三部分组成:

  • XSLT。它是Extensible Stylesheet Language Transformation的缩写,称为可扩展样式单语言转换。XSLT的作用是将一个XML文档转换为另一种类别的XML文档(也包括HTML文档)。因此,可以利用XSLT将XML文档转换为HTML,以便在浏览器上显示。W3C最新的XSLT规范版本是XSLT 3.0。
  • XPath。XPath的作用是指定访问XML数据的寻址路径表达式。
  • XSL-FO(XSL Formatting Objects)。XSL-FO的作用是对XML文档中的数据排版,以显示这些数据设计美观的版面,满足印刷、打印的要求。
  • 示例代码:
    XSLT示例:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:fo="http://www.w3.org/1999/XSL/Format" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="html" indent="yes" encoding="gb2312"></xsl:output>
<xsl:template match="/">
		<html>
			<head><title>个人信息介绍</title></head>
			<body><h1>姓名:<xsl:value-of select="person/name"/></h1>
				<ul>
					<li>生日:<xsl:value-of select="person/birthdate"/></li>
					<li>性别:<xsl:value-of select="person/sex"/></li>
					<li>身高:<xsl:value-of select="person/high"/></li>
				</ul>
			</body>
		</html>
	</xsl:template>

</xsl:stylesheet>

被转换的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<!--通过处理指令引入XSLT文档-->
<?xml-stylesheet type="text/xsl" href="simple.xslt"?>
<person>
	<name>田诗琪</name>
	<birthdate>2011-04-11</birthdate>
	<sex>女</sex>
	<high>83cm</high>
</person>

在XML中引用XSLT

在XML文件中引入XSLT与在XML中引入CSS的方法大同小异,也是通过处理指令xml-stylesheet方式引入的,具体的代码格式如下:
<?xml-stylesheet type="text/xsl" href="xslt文件路径"?>
说明:
<?xml-stylesheet>是处理指令,为XMl解析器制定显示时所使用的样式;
type:指定样式单文件的格式,如果要引入的是xsl或xslt文件,则该属性值必须为“text/xsl”;
href:用于指定XSLT文件或XSL文件的URl;

XSLT的转换模式

转换过程包括两种:
服务器端转换模式
客户端转换模式

  • 服务器端转换模式
    这种模式下,XML文件在服务器端先由XSLT文件转换为一个新的文件,通常是HTML文件,然后再将该文件发送给浏览器,由浏览器进行解析。服务器转换的工具包括Saxon、Xalan、微软的msxsl.exe,以及XmlSpy自带的工具等。
    服务器转换还可以细分为:

    • 实时转换
      实时转换:当服务器接收到来自客户端的请求时,借助于动态脚本语言(例如:JSP)根据XSLT将XML进行转换,将转换后的结果(例如:HTML)发送给客户端。如图所示:
      在这里插入图片描述
    • 批量转换
      批量转换:批量转换预先根据XSLT将XML转换,将转换后的结果保存到服务器上,当接到客户端请求时将预先转换好的结果文件发送给客户端。
      在这里插入图片描述
  • 客户端转换模式
    这种方式是将XML文件和XLST文件都传送到客户端,由浏览器进行实时转换。这种模式下浏览器必须支持XML和XSLT。目前IE6、Firefox3.0、Opera9.5及以上版本对XSLT都有较好的支持。具体的转换过程如图所示:
    在这里插入图片描述

XSLT的基本语法

XSLT本身也是XML文件,因此编写XSLT文档的基本约束与XML文件相同。该文件也需要有一个根元素,其内部嵌套了多种标记,每种标记表达了不同的含义。

  • XSLT的根元素可以是<stylesheet><transform>
  • <output>标记用于控制输出文档的类型及格式。该元素作为<stylesheet><transform>的子元素。语法格式如下:
<output  method="xml|html|text"  vesion=""
encoding="" omit-xml-declaration="yes|no"standalone="" doctype-public=""
doctype-system="" cdata-section-elements=""
indent="" media-type="text/xml|text/html|text/plain">

在这里插入图片描述
在这里插入图片描述

  • 转换为XML文档的output标记设定:
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    转换为新的XML文档后的代码:
    <?xml version="1.0" encoding="UTF-8"?>

  • ouput标记设定输出HTML简单设定
    <xsl:output method="html" encoding="gb2312"></xsl:output>
    转换HTML后的结果:
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">

  • XSLT模板有两种:模板规则(Template Rule)和具名模板(Named Template)

  • 所谓模板规则是定义的模板匹配并处理指定的XML节点,必须有match属性,属性值为XPath表达式,指明该模板可匹配哪些XML节点。
    <xsl:template>标记定义规则模板的语法:
    <xsl:template match="" mode="">
    ......规则
    </xsl:template>
    属性说明:
    match属性用于关联 XML 元素和模板,属性值是XPath路径,用于指定模板应用于哪些节点,一个模板对应一组规则,模板中的规则用于控制XML文档的输出。也可用来为整个文档定义模板(举例,match="/" 定义整个文档)。
    mode属性是一个可选属性。当需要对同一个节点定义不同规则模板,在不同情况下需要使用不同的模板时,定义模板就需要使用mode属性,mode属性的属性值必须唯一。

  • <apply-templates>标记用来调用已定义的规则模板,<apply-templates>标记的语法:
    <apply-templates [select=" "] [mode="a"]/>
    属性说明:
    select是一个可选的属性,该属性值必须是一个XPath值,用于指定哪些标记需要调用另一个模板来处理。如果select属性省略,则按照当前节点集顺序来处理每一个节点,每一个节点都由另一个模板来处理。
    使用带有mode属性的模板时apply-template 元素也需要增加mode属性,且属性值与模板定义的属性值相同。

  • 所谓具名模板是具有具体名称的模板,可以被call-template元素反复调用,处理当前的XML上下文内容。必须有name属性,以便调用。
    <xsl:template>标记定义具名模板的语法:
    <xsl:template name="">
    ......规则
    </xsl:template>
    属性说明:
    name属性用于定义模板的名字,该名字是一个固定的值。

  • <call-template>标记用来调用已定义的具名模板,<call-template>标记的语法:
    <xsl:call-template name="value">
    属性说明:
    name属性用于指定所调用的具名模板的名字。

  • 定义了传递给模板的参数的值。

<xsl:with-param> 标记的语法:
<xsl:with-param name="name" select="expression">
  <!-- Content:template -->
</xsl:with-param>
属性说明:
name属性是必需给出的,规定了参数的名称。
select属性给出了定义的参数的值,是一个 XPath 表达式
  • 获取传递的参数需要使用<xsl:param>元素,该元素用于声明局部或全局参数。如果在模板内声明参数,就是局部参数,如果作为顶层元素来声明,就是全局参数。
    xsl:param 标记的语法:
<xsl:param name="name" select="expression">
<!-- Content:template -->
</xsl:param>
属性说明:
name属性是必需给出的,规定了参数的名称。
select属性值是参数的默认值,是一个 XPath 表达式。

转换为HTML文档常用标记

  • <value-of>标记
    用于输出节点的内容。
    标记语法:
    <value-of select="" [disable-output-escaping="yes|no"]/>

    属性说明:
    select属性:是一个XPath表达式,将该表达式所对应的内容显示出来
    disable-output-escaping属性:是一个可选属性,表示输出文本内容时是否禁用转义

  • <for-each>标记
    遍历被选择的节点集,遍历过程中被迭代处理的节点作为当前节点。
    <for-each>语法:
    <for-each select="">迭代体</for-each>
    属性说明:
    select属性:这个属性必须给出,该属性值是一个XPath表达式,表示一个节点集。

  • <if>标记
    <if>标记的作用相当于if语句。<if>标记的语法:

<if test="">
内容
</if>

属性说明:
test属性:必须给出,该属性值是一个布尔表达式或一个布尔值。当属性值为true时,计算输出该元素包含的内容,否则不执行.

  • <choose><when><otherwise>标记
      类似于switch语句执行多条件判断。注意:<choose><when><otherwise>标记中可以包含多个分支<when>。它表示,当每一个分支的条件都不满足时,如果有<otherwise>则执行该分支。语法格式:
<choose>
[<when test>内容</when>]+
[<otherwise>内容</otherwise>]?
</choose>

属性说明:
test:必须给出,该属性值是一个布尔表达式或一个布尔值。当属性值为true时,计算输出该元素包含的内容,否则不执行。

  • <sort>标记
      <sort>标记用于将元素按照指定的顺序进行排序,<sort>标记的语法:
<sort select="XPath表达式"
lang=""
data-type="text|number|QName"
order="ascending|descending"
case-order="upper-first|lower-first"
>

属性说明:
select:属性值为一个XPath表达式
lang:用于指定排序顺序的语言字母表
data-type:指定字符串的数据类型,如果不指定则使用表达式的类型作为默认类型
order:指定使用升序(ascending)还是降序descending,case-order:指定大写字母在小写字
母之前(upper-first)还是之后(lower-first)

  • <element>标记
      用于在结果树中动态的创建元素。使用创建的元素,其元素名称和元素值都是可变的。语法格式:
    <element name="" namespace=""use-attribute-sets="">

属性说明:
name:该属性是必须属性,指定所要创建的元素名称。
namespace:该属性是可选的,如果属性包含命名空间,该属性指定命名空间。
use-attribute-sets:多个属性的集合,多个名字中间以空白间隔。

  • <variable>标记
    <variable>的语法:
    <variable name="name" select="expression"/>

属性说明:
name:变量名
select:是一个XPath表达式,该表达式的值作为变量的值

  • <attribute-set>标记
      多个属性经常放在一起使用,为了更方便的复用,这时可以使用<attribute-set>。该元素作为<stylesheet><transform>的子元素。
    语法格式:
<attribute-set name="" use-attribute-sets="">
<attribute>+
</attribute-set>

属性说明:
name:必填属性,用于指定该属性集的名字
use-attribute-sets:可以指定多个属性集的名字。多个名字之间以空白间隔。

  • <copy><copy-of>标记
    将源文档的节点直接复制到结果文档中,XSLT提供了以下两个元素:<copy>用于将源文档的节点复制到结果文档中;<copy-of>用于将源文档里节点集复制到结果文档中。

  • <comment>标记
    建立注释文字,例如:

<xsl:comment>
		         This is a comment!
</xsl:comment>
  • <processing-instruction>标记
    用于创建处理指令。语法格式:
    <processing-instruction name="">

属性说明:
name:处理指令的指令名称

  • <import>标记
    <import>可导入另一份XSLT样式单。注意:<import>元素只能作为<stylesheet><transform>的子元素,并且位于其它子元素之前,重复样式的优先级从高到低为原样式单的样式、后导入的样式单的样式,先导入的样式单的样式、调用被覆盖的样式<apply-imports>
    语法:
    <import href=""/>

属性说明:
href:用来指定被导入的XSLT文档的URI地址

  • <include>标记
    用于包含另一份XSLT文档。注意: 被包含文件和包含文件的样式不能相同。如果相同则会出现异常。
    语法:
    <include href=""/>

属性说明:
href:用来指定被导入的XSLT文档的URI地址

猜你喜欢

转载自blog.csdn.net/WilliamChancwl/article/details/85310086