XSLT 1.0推荐标准摘译(第一部分)

XML 专栏收录该内容
6 篇文章 0 订阅

 

1 简介

XSLT 转换是良构的XML 文档,遵循XML 命名规范。XSLT 定义的元素通过专门的名称空间与其他名称区分开。

XSLT 转换描述了从源树到结果树的转化规则。转换的关键是模式和模板。模式与源树中的元素匹配,模板本质上是用于创建结果树的一部分。在构造结果树的过程中,源树中的元素可能被过滤或者改变顺序,也可以增加新的结构。

样式表由一组模板规则组成。模板规则包括两部分:与源树中节点匹配的模式,可以实例化作为结果树一部分的模板。

模板针对源树中特定的元素实例化来创建结果树中的一部分。模板可以包含定义字面结果元素结构的元素,也可包含XSLT 元素,后者是创建结果树片段的指令。模板实例化的时候,将执行所有的指令并用创建的结果树片段代替。指令可以选择和处理后代元素。处理后代元素的时候将查找适用的模板规则并实例化对应的模板。只有指令执行中选中的元素才会被处理。通过查找根节点的模板规则并实例化其模板来构造结果树。

可能有多个模板规则模式与某个元素匹配,但是只有一个被应用(参见5.5 )。

模板实例化总是相对于当前节点和当前节点列表进行的。当前节点是当前节点列表的一个成员。XSLT 的很多操作都是关于当前节点的,只有少数指令改变当前节点列表或者当前节点,这些指令实例化的过程中,当前节点列表发生了改变,新表中的每个成员依次成为当前节点;实例化结束后,当前节点和当前节点列表又回到实例化之前的状态。

XSLT 采用XPath 表达式选择处理的元素、条件处理和生成文本

MIME 类型为 text/xml application/xml

 

2 样式表结构

XSLT 名称空间URI http://www.w3.org/1999/XSL/Transform 。前缀使用“xsl :”。

stylesheet 元素:

 

<xsl:stylesheet
  id = id
  extension-element-prefixes = tokens
  exclude-result-prefixes = tokens
  version = number >
  <!-- Content: (
xsl:import *, top-level-elements ) -->
</xsl:stylesheet>

l  xsl:transform xsl:stylesheet. 可互换使用

l  xsl:stylesheet 元素必须有version 属性。

l  xsl:stylesheet 元素的孩子称为顶层元素。

l  xsl:import 元素如果有的话必须是第一个。

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

  <xsl:import href="..."/>

  <xsl:include href="..."/>

  <xsl:strip-space elements="..."/> 

  <xsl:preserve-space elements="..."/>

  <xsl:output method="..."/>

  <xsl:key name="..." match="..." use="..."/>

  <xsl:decimal-format name="..."/>

  <xsl:namespace-alias stylesheet-prefix="..." result-prefix="..."/>

  <xsl:attribute-set name="...">    ...  </xsl:attribute-set>

  <xsl:variable name="...">...</xsl:variable>

  <xsl:param name="...">...</xsl:param>

  <xsl:template match="...">    ...  </xsl:template>

  <xsl:template name="...">    ...  </xsl:template>

</xsl:stylesheet>

 

使用字面结果元素作为样式表

这种样式表只能包含一个用于根节点的模板,每个样式表只能包含一个字面结果元素。比如:

<html xsl:version="1.0"

      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

      xmlns="http://www.w3.org/TR/xhtml1/strict">

  <head>

    <title>Expense Report Summary</title>

  </head>

  <body>

    <p>Total Amount: <xsl:value-of select="expense-report/total"/></p>

  </body>

</html>

相当于:

<xsl:stylesheet version="1.0"

                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

                xmlns="http://www.w3.org/TR/xhtml1/strict">

<xsl:template match="/">

<html>

  <head>

    <title>Expense Report Summary</title>

  </head>

  <body>

    <p>Total Amount: <xsl:value-of select="expense-report/total"/></p>

  </body>

</html>

</xsl:template>

</xsl:stylesheet>

作为样式表文档元素的字面结果元素必须包含xsl:version 属性,不能包含顶层元素。不建议采用这种简单语法。

 

限定名

XSLT 内部对象模板、mode 、属性集、键、小数格式、变量和参数的名称都是QName

 

2.5 向前兼容处理

 

2.6 组合样式表

XSLT 提供了两种组合样式表的机制:包含和引入。

样式表包含

<!-- Category: top-level-element -->
<xsl:include
href = uri-reference />

Xsl:include 只能作为顶层元素出现。href 属性指定了要包含的样式表。包含在XML 树这一层上完成。被包含样式表作为XML 文档解析,xsl:stylesheet 的所有孩子元素被取出来替代包含样式表中的include 指令。重复或循环包含将导致错误。

样式表导入

<xsl:import  href = uri-reference />

xsl:import 只能作为顶层元素出现,而且必须出现在所有其他元素,包括xsl:include 之前。被导入的样式规则优先级低于本地规则。

 

2.7 嵌入样式表

 

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值