xsl样式表学习

XSL指扩展样式表语言(Extensible Stylesheet Language)

万维网联盟开始发展样式表的起因是由于对基于XML的样式表语言的需求

XSLT指XSL转换。XSLT可以将XML文档转换为其他文档,比如XHTML

XSLT参考手册

XSLT元素https://www.w3school.com.cn/xsl/xsl_w3celementref.asp
对所有来自 W3C 标准的 XSLT 元素进行了描述,以及关于浏览器支持的信息。
XSLT函数https://www.w3school.com.cn/xsl/xsl_functions.asp
XSLT包含了超过100个内置函数。这些函数可以用于字符串、数值、日期和时间比较、节点和QName(QName是一个XML中)的概念,表示一个有命名空间的节点的名称。处理、序列处理、逻辑值等等。

内容目录

XSL语言

详细解释XSL的子语言:XSLT、XPath、XSL-FO。

起始于 XSL

XSL 指扩展样式表语言(EXtensible Stylesheet Language)。
万维网联盟 (W3C) 开始发展 XSL 的原因是:存在着对于基于 XML 的样式表语言的需求。

CSS = HTML 样式表

HTML 使用预先定义的标签,标签的意义很容易被理解。

HTML 元素中的

元素定义表格 - 并且浏览器清楚如何显示它。

向 HTML 元素添加样式是很容易的。通过 CSS,很容易告知浏览器用特定的字体或颜色显示一个元素。

XSL = XML 样式表

XML 不使用预先定义的标签(我们可以使用任何喜欢的标签名),并且这些标签的意义并不都那么容易被理解。

元素意味着一个 HTML 表格,一件家具,或是别的什么东西 - 浏览器不清楚如何显示它。

XSL 可描述如何来显示 XML 文档!

XSL - 不仅仅是样式表语言

XSL 包括三部分:
XSLT
一种用于转换 XML 文档的语言。
XPath
一种用于在 XML 文档中导航的语言。
XSL-FO
一种用于格式化 XML 文档的语言。
XPath 是一种用于在 XML 文档中进行导航的语言。
学习之前,您需要具备的基础知识:
在您继续学习之前,需要对以下知识有基本的了解:

XSLT简介

XSLT 的简介。包括其概念和作用。
XSLT 是一种用于将 XML 文档转换为 XHTML 文档或其他 XML 文档的语言。
XPath 是一种用于在 XML 文档中进行导航的语言。

HTML / XHTML
XML / XML 命名空间
XPath
如果您希望首先学习这些项目,请在我们的 首页 访问这些教程。

什么是XSLT

什么是 XSLT?
XSLT 指 XSL 转换(XSL Transformations)。
XSLT 是 XSL 中最重要的部分。
XSLT 可将一种 XML 文档转换为另外一种 XML 文档。
XSLT 使用 XPath 在 XML 文档中进行导航。
XPath 是一个 W3C 标准。

XSLT = XSL 转换

XSLT 是 XSL 中最重要的部分。

XSLT 用于将一种 XML 文档转换为另外一种 XML 文档,或者可被浏览器识别的其他类型的文档,比如 HTML 和 XHTML。通常,XSLT 是通过把每个 XML 元素转换为 (X)HTML 元素来完成这项工作的。

通过 XSLT,您可以向或者从输出文件添加或移除元素和属性。您也可重新排列元素,执行测试并决定隐藏或显示哪个元素,等等。

描述转化过程的一种通常的说法是,XSLT 把 XML 源树转换为 XML 结果树

XSLT 使用 XPath

XSLT 使用 XPath 在 XML 文档中查找信息。XPath 被用来通过元素和属性在 XML 文档中进行导航。

如果您希望首先学习 XPath,请访问我们的 XPath 教程。

XSLT如何工作

在转换过程中,XSLT使用XPath来定义源文档中可匹配一个或多个预定义模板的部分。一旦匹配被找到XSLT就会把源文档的匹配部分转换为结果文档。

XSLT是W3C标准

XSLT 在 1999 年 11 月 16 日被确立为 W3C 标准。

如需更多有关 W3C 的 XSLT 活动的信息,请访问我们的 W3C 教程。

XSLT 浏览器

支持XSLT的浏览器总论
几乎所有主要的浏览器均支持 XML 和 XSLT。
感觉这些都是古早浏览器时代的浏览器
新的应该也支持吧

XSLT 转换

如何使用 XSLT 将 XML 文档转换为 XHTML 文档。
实例研究:如何使用 XSLT 将 XML 转换为 XHTML。

正确的样式表声明

把文档声明为 XSL 样式表的根元素是 xsl:stylesheetxsl:transform

注释: xsl:stylesheetxsl:transform 是完全同义的,均可被使用!
根据 W3C 的 XSLT 标准,声明 XSL 样式表的正确方法是:

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

或者

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

如需访问 XSLT 的元素、属性以及特性,我们必须在文档顶端声明 XSLT 命名空间。
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 指向了官方的 W3C XSLT 命名空间。如果您使用此命名空间,就必须包含属性 version="1.0"。

从一个原始的 XML 文档开始

我们现在要把下面这个 XML 文档("cdcatalog.xml")转换为 XHTML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
.
.
.
</catalog>

在 Internet Explorer 和 Firefox 中查看 XML 文件:
打开 XML 文件(通常通过点击某个链接) - XML 文档会以颜色化的代码方式来显示根元素及子元素。点击元素左侧的加号或减号可展开或收缩元素的结构。如需查看原始的XML源文件(不带有加号和减号),请在浏览器菜单中选择“查看页面源代码”。

创建 XSL 样式表

然后创建一个带有转换模板的 XSL 样式表("cdcatalog.xsl"):

<?xml version="1.0" encoding="ISO-8859-1"?>

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

<xsl:template match="/">
  <html>
  <body>
    <h2>My CD Collection</h2>
    <table border="1">
    <tr bgcolor="#9acd32">
      <th align="left">Title</th>
      <th align="left">Artiest</th>
      <th align="left">ok</th>
      <th align="left">ok</th>
    </tr>
    <xsl:for-each select="catalog/cd">
    <tr>
      <td><xsl:value-of select="title"/></td>
      <td><xsl:value-of select="artist"/></td>
    </tr>
    </xsl:for-each>
    </table>
   </body>
  </html>  
</xsl:template>

</xsl:stylesheet>    

我们讲一下这个table标记对里的东西:

:定义一个表格,并设置边框为1。
  • :定义一个表格行,并设置背景颜色为"#9acd32"。
  • :定义一个表头单元格,并设置内容为"Title",并将内容左对齐。
  • :定义一个表头单元格,并设置内容为"Artist",并将内容左对齐。
  • <xsl:for-each select="catalog/cd">:对XML文档中的每个"catalog/cd"节点执行循环。
  • :定义一个表格行。
  • :定义一个数据单元格,并设置内容为当前"catalog/cd"节点下的"title"元素的值。
  • :结束表格行的定义。
  • </xsl:for-each>:结束循环。
  • Title Artist
    :结束表格的定义。

    我们会在下一节对本例的细节进行解释。

    XSLT xsl:template 元素

    xsl:template 元素包含了当指定的节点被匹配时所能应用的规则.
    XSL 样式表由一个或多套被称为模板(template)的规则组成。

    每个模板含有当某个指定的节点被匹配时所应用的规则。

    xsl:template 元素

    xsl:template 元素用于构建模板。
    match属性用于关联XML元素和模板。match属性也可以用来为震哥哥文档定义模板。match属性的值是XPath表达式(举例,match="/"定义整个文档)
    好了,让我们看一下上一节中的 XSL 文件的简化版本:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
    <xsl:template match="/">
     <html>
     <body>
       <h2>My CD Collection</h2>
       <table border="1">
         <tr bgcolor="#9acd32">
           <th>Title</th>
           <th>Artist</th>
         </tr>
         <tr>
           <td>.</td>
           <td>.</td>
         </tr>
       </table>
     </body>
     </html>
    </xsl:template>
    
    </xsl:stylesheet>
    

    代码解释:

    由于 XSL 样式表本身也是一个 XML 文档,因此它总是由 XML 声明起始:

    下一个元素,xsl:stylesheet,定义此文档是一个 XSLT 样式表文档(连同版本号和 XSLT 命名空间属性)。

    xsl:template 元素定义了一个模板。而 match="/" 属性则把此模板与 XML 源文档的根相联系。

    xsl:template 元素内部的内容定义了写到输出结果的 HTML 代码。

    最后两行定义了模板的结尾,及样式表的结尾。

    XSLT xsl:value-of 元素

    xsl:value-of 元素可提取选定节点的值。
    xsl:value-of用于提取某个选定节点的值,并把值添加到转换的输出流中

    <td><xsl:value-of select="catalog/cd/title"/></td>
    

    select 属性的值是一个XPath表达式。此表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录。

    XSLT xsl:for-each 元素

    xsl:for-each 元素允许您在 XSL 中进行循环。
    xsl:for-each 元素可用于选取指定的节点集中的每个xml元素

    <xsl:for-each select="catalog/cd">
          <tr>
            <td><xsl:value-of select="title"/></td>
            <td><xsl:value-of select="artist"/></td>
          </tr>
          </xsl:for-each>
    

    结果过滤

    通过在 xsl:for-each 元素中添加一个选择属性的判别式,我们也可以过滤从 XML 文件输出的结果。<xsl:for-each select="catalog/cd[artist='Bob Dylan']">
    合法的过滤运算符:
    1,=(等于)
    2,!=(不等于)
    3,<(xiaoyu)
    4, >(dayu)

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
    <xsl:template match="/">
     <html>
      <body>
      <h2>My CD Collection</h2>
      <table border="1">
       <tr bgcolor="#9acd32">
          <th>Title</th>
          <th>Artist</th>
       </tr>
       <xsl:for-each select="catalog/cd[artist='Bob Dylan']">
       <tr>
          <td><xsl:value-of select="title"/></td>
          <td><xsl:value-of select="artist"/></td>
       </tr>
       </xsl:for-each>
      </table>
     </body>
     </html>
    </xsl:template>
    
    </xsl:stylesheet>
    

    XSLT xsl:sort 元素

    xsl:sort 元素用于对输出进行排序。
    xsl:sort 元素用于对结果进行排序。
    在何处放置排序信息
    如需对结果进行排序,只要简单地在 XSL 文件中的 xsl:for-each 元素内部添加一个 xsl:sort 元素:
    <xsl:sort select="artist"/>
    用法:

    <xsl:for-each select="catalog/cd">
         ** <xsl:sort select="artist"/>**
          <tr>
            <td><xsl:value-of select="title"/></td>
            <td><xsl:value-of select="artist"/></td>
          </tr>
          </xsl:for-each>
    

    XSLT xsl:if 元素

    xsl:if 元素用于针对 XML 文件的内容放置一个条件测试。
    如需放置针对 XML 文件内容的条件测试,请向 XSL 文档添加 xsl:if 元素。
    用法:

    <xsl:for-each select="catalog/cd">
    <xsl:if test="price &gt;10">
      <tr>
        <td><xsl:value-of select="title"/></td>
        <td><xsl:value-of select="artist"/></td>
      </tr>
    </xsl:if>
    </xsl:for-each>
    

    注释:必选的 test 属性的值包含了需要求值的表达式。

    上面的代码仅仅会输出价格高于 10 的 CD 的 title 和 artist 元素。

    上面的转换结果类似这样:

    语法

    XSLT xsl:choose 元素

    xsl:choose 元素被用来与 xsl:whenxsl:otherwise 配合使用,来表达多重的条件检验。

    XSLT xsl:apply-templates 元素

    xsl:apply-templates 元素可把模板规则应用到当前节点或者当前元素的子节点。

    客户端的 XSL

    如何在客户端将 XML 文档转换为 XHTML 文档。

    服务器端的XSL

    如何在服务器端将 XML 文档转换为 XHTML 文档。

    posted @ 2023-10-30 10:22  蹇爱黄  阅读(41)  评论(0编辑  收藏  举报