旗下导航:搜·么
当前位置:网站首页 > XML教程 > 正文

猖獗XML进修笔记(11)-----------XSLT解说【XML教程】,XML,学习笔记,XSLT讲解

作者:搜教程发布时间:2019-11-30分类:XML教程浏览:64评论:0


导读:前面临XML的基础的学问已整顿过了,如果感兴趣能够接见下面的网址http://www.ki4.cn/关于文章中的图文显现部份涌现毛病,没法显现,敬请体谅!想检...
前面临XML的基础的学问已整顿过了,如果感兴趣能够接见下面的网址

http://www.ki4.cn/

关于文章中的图文显现部份涌现毛病,没法显现,敬请体谅!

想检察的话能够下载w3cshool API 文档

衔接http://www.ki4.cn/下载

XSLT它肇端于 XSL,完毕于 XSLT、XPath 以及 XSL-FO。

背面会对XPath举行细致解说

肇端于 XSL

XSL 指扩大款式表言语(EXtensible Stylesheet Language)。

万维网同盟 (W3C) 最先生长 XSL 的原因是:存在着关于基于 XML 的款式表言语的需求。

CSS = HTML 款式表

HTML 运用预先定义的标签,标签的意义很轻易被明白

HTML 元素中的 <table> 元素定义表格 - 而且阅读器清晰怎样显现它

向 HTML 元素增加款式是很轻易的。经由历程 CSS,很轻易示知阅读器用特定的字体或色彩显现一个元素。

XSL = XML 款式表

XML 不运用预先定义的标签(我们能够运用任何喜好的标署名),而且这些标签的意义并不都那末轻易被明白

<table> 元素意味着一个 HTML 表格,一件家具,或是别的什么东西 - 阅读器不清晰怎样显现它

XSL 可形貌怎样来显现 XML 文档!

XSL - 不仅仅是款式表言语

XSL 包括三部份:

  • XSLT

  • 一种用于转换 XML 文档的言语。

  • XPath

  • 一种用于在 XML 文档中导航的言语。

  • XSL-FO

  • 一种用于花样化 XML 文档的言语。


XSLT 是一种用于将 XML 文档转换为 XHTML 文档或其他 XML 文档的言语。

XPath 是一种用于在 XML 文档中举行导航的言语。

进修之前,您须要具有的基础学问:

在您继承进修之前,须要对以下学问有基础的相识:

  • HTML / XHTML

  • XML / XML 定名空间

  • XPath

如果您愿望起首进修这些项目,请在我们的 首页 接见这些教程。

什么是 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 运用 XPath 来定义源文档中可婚配一个或多个预定义模板的部份。一旦婚配被找到,XSLT 就会把源文档的婚配部份转换为效果文档。

准确的款式表声明

把文档声明为 XSL 款式表的根元素是 <xsl:stylesheet> 或 <xsl:transform>。

诠释: <xsl:stylesheet> 和 <xsl: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源文件(不带有加号和减号),请在阅读器菜单中挑选“检察页面源代码”。

在 Netscape 6 中检察 XML 文件:

翻开 XML 文件,然后在 XML 文件中右击,并挑选“检察页面源代码”。XML文档会以色彩化的代码体式格局来显现根元素及子元素。

在 Opera 7 中检察 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">Artist</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>

把 XSL 款式表链接到 XML 文档

向 XML 文档("cdcatalog.xml")增加 XSL 款式表援用:

<?xml version="1.0" encoding="ISO-8859-1"?><?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?><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>

<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 声明肇端:

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

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

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

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

末了两行定义了模板的末端,及款式表的末端。

以上转换的效果相似如许:

<xsl:value-of> 元素

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

<?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><xsl:value-of select="catalog/cd/title"/></td>
      <td><xsl:value-of select="catalog/cd/artist"/></td>
     </tr>
   </table>
 </body>
 </html>
</xsl:template>

</xsl:stylesheet>

诠释:select 属性的值是一个 XPath 表达式。此表达式的事情体式格局相似于定位某个文件体系,在其中正斜杠可挑选子目录。

上面的转换效果相似如许:


<xsl:for-each> 元素

<xsl:for-each> 元素可用于拔取指定的节点集合的每一个 XML 元素。

<?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">
      <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>

诠释:select 属性的值是一个 XPath 表达式。此表达式的事情体式格局相似于定位某个文件体系,在其中正斜杠可挑选子目录。

上面的转换效果相似如许:

效果过滤

经由历程在 <xsl:for-each> 元素中增加一个挑选属性的判别式,我们也能够过滤从 XML 文件输出的效果。

<xsl:for-each select="catalog/cd[artist='Bob Dylan']">

正当的过滤运算符:

  • = (即是)

  • != (不即是)

  • &lt; (小于)

  • &gt; (大于)

<?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>

上面的转换效果相似如许:


<xsl:sort> 元素用于对效果举行排序。

在那边安排排序信息

如需对效果举行排序,只需简朴地在 XSL 文件中的 <xsl:for-each> 元素内部增加一个 <xsl:sort> 元素:

<?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">      <xsl:sort select="artist"/>
      <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>

诠释:select 属性指导须要排序的 XML 元素。

上面的转换效果相似如许:


<xsl:if> 元素

如需安排针对 XML 文件内容的前提测试,请向 XSL 文档增加 <xsl:if> 元素。

语法

<xsl:if test="expression">
  ...
  ...如果前提建立则输出...
  ...
</xsl:if>

在那边安排 <xsl:if> 元素

如需增加有前提的测试,请在 XSL 文件中的 <xsl:for-each> 元素内部增加 <xsl:if> 元素:

<?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">      <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>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

诠释:必选的 test 属性的值包括了须要求值的表达式。

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

上面的转换效果相似如许:


<xsl:choose> 元素

语法

<xsl:choose>
  <xsl:when test="expression">
    ... 输出 ...
  </xsl:when>
  <xsl:otherwise>
    ... 输出 ....
  </xsl:otherwise>
</xsl:choose>

在那边安排挑选前提

要插进去针对 XML 文件的多重前提测试,请向 XSL 文件增加 <xsl:choose>、<xsl:when> 以及 <xsl:otherwise>:

<?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">
      <tr>
        <td><xsl:value-of select="title"/></td>      	<xsl:choose>
          <xsl:when test="price &gt; 10">
            <td bgcolor="#ff00ff">
            <xsl:value-of select="artist"/></td>          </xsl:when>
          <xsl:otherwise>
            <td><xsl:value-of select="artist"/></td>          </xsl:otherwise>
        </xsl:choose>
      </tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

上面的代码会在 CD 的价钱高于 10 时向 "Artist" 列增加粉色的背景色彩。

上面的转换效果相似如许:

检察此 XML 文件,检察此 XSL 文件,检察效果。

另一个例子

这是别的一个包括两个 <xsl:when> 元素的例子:

<?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">
      <tr>
        <td><xsl:value-of select="title"/></td>      	<xsl:choose>
          <xsl:when test="price &gt; 10">
            <td bgcolor="#ff00ff">
            <xsl:value-of select="artist"/></td>          </xsl:when>
          <xsl:when test="price &gt; 9">
            <td bgcolor="#cccccc">
            <xsl:value-of select="artist"/></td>          </xsl:when>
          <xsl:otherwise>
            <td><xsl:value-of select="artist"/></td>          </xsl:otherwise>
        </xsl:choose>
      </tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

上面的代码会在 CD 的价钱高于 10 时向 "Artist" 列增加粉色的背景色彩,并在 CD 的价钱高于 9 且低于即是 10 时向 "Artist" 列增加灰色的背景色彩。

上面的转换效果相似如许:


<xsl:apply-templates> 元素

<xsl:apply-templates> 元素可把一个模板运用于当前的元素或许当前元素的子节点。

如果我们向 <xsl:apply-templates> 元素增加一个 select 属性,此元素就会仅仅处置惩罚与属性值婚配的子元素。我们能够运用 select 属性来划定子节点被处置惩罚的递次。

请看下面的 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> 
<xsl:apply-templates/> 
</body>
</html>
</xsl:template>

<xsl:template match="cd">
<p>
<xsl:apply-templates select="title"/> 
<xsl:apply-templates select="artist"/>
</p>
</xsl:template>

<xsl:template match="title">
Title: <span style="color:#ff0000">
<xsl:value-of select="."/></span>
<br />
</xsl:template>

<xsl:template match="artist">
Artist: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
<br />
</xsl:template>

</xsl:stylesheet>

XSLT 元素

如果您须要有关以下元素的更细致的信息,请点击元素列中的链接。

  • N: 示意最早支撑此标签的 Netscape 版本

  • IE: 示意最早支撑此标签的 Internet Explorer 版本

诠释:在 IE 5 中所支撑的元素能够涌现非规范的行动,这是因为 IE 5 宣布于 XSLT 被确立为正式的 W3C 规范之前。

元素 形貌 IE N
apply-imports 运用来自导入款式表中的模版划定规矩。 6.0
apply-templates 向当前元素或当前元素的子元素运用模板。 5.0 6.0
attribute 向元素增加属性。 5.0 6.0
attribute-set 建立定名的属性集。 6.0 6.0
call-template 挪用一个指定的模板。 6.0 6.0
choose 与<when>以及<otherwise>协同运用,来表达多重前提测试。 5.0 6.0
comment 在效果树中建立诠释节点。 5.0 6.0
copy 建立当前节点的一个备份(无子节点及属性)。 5.0 6.0
copy-of 建立当前节点的一个备份(带有子节点及属性)。 6.0 6.0
decimal-format 定义当经由历程 format-number() 函数把数字转换为字符串时,所要运用的字符和标记。 6.0
element 在输出文档中建立一个元素节点。 5.0 6.0
fallback 如果处置惩罚器不支撑某个XSLT元素,划定一段备用代码来运转。 6.0
for-each 遍历指定的节点集合的每一个节点。 5.0 6.0
if 包括一个模板,仅当某个指定的前提建立时运用此模板。 5.0 6.0
import 用于把一个款式表中的内容倒入另一个款式表中。 6.0 6.0
include 把一个款式表中的内容包括到另一个款式表中。 6.0 6.0
key 声明一个定名的键。 6.0 6.0
message 向输出写一条音讯(用于毛病报告)。 6.0 6.0
namespace-alias 把款式表中的定名空间替换为输出中差别的定名空间。 6.0
number 测定当前节点的整数位置,并对数字举行花样化。 6.0 6.0
otherwise 划定 <choose> 元素的默许行动。 5.0 6.0
output 定义输出文档的花样。 6.0 6.0
param 声明一个部分或全局参数。 6.0 6.0
preserve-space 用于定义保存空缺的元素。 6.0 6.0
processing-instruction 生成处置惩罚指令节点。 5.0 6.0
sort 对效果举行排序。 6.0 6.0
strip-space 定义应该删除空缺字符的元素。 6.0 6.0
stylesheet 定义款式表的根元素。 5.0 6.0
template 当指定的节点被婚配时所运用的划定规矩。 5.0 6.0
text 经由历程款式表生成文本节点。 5.0 6.0
transform 定义款式表的根元素。 6.0 6.0
value-of 提取选定节点的值。 5.0 6.0
variable 声明部分或许全局的变量。 6.0 6.0
when 划定 <choose> 元素的行动。 5.0 6.0
with-param 划定需被传入某个模板的参数的值。 6.0 6.0

以上就是猖獗XML进修笔记(11)-----------XSLT解说的内容,更多相关内容请关注ki4网(www.ki4.cn)!

标签:XML学习笔记XSLT讲解


欢迎 发表评论: