XSL语法介绍

语法

 

例子已经放在上面,下面我们可以来仔细的分析其中的语法结果和关键所在:
  
    首先注意到的是,XSL文件本身即是一份 XML文件,所以在XSL文件的开头,一样有和XML文件相同的声明。W3C这个XML的标准机构为XSL定义了很多标记(元素),XSL文件就是这些标记和HTML标记的组合。在XSL文件中,必须有如下一行的代码:
  
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
  
    这里,xsl:stylesheet是XSL文件的根元素,在根元素中包含了所有的排版样式,样式表就是由这些排版样式组合成的;xmlns:xsl="http://www.w3.org/TR/WD-xsl"这一句主要用来说明该XSL样式表是使用W3C所制定的XSL,设定值就是XSL规范所在的URL地址。
  
    实际上,这里"http://www.w3.org/TR/WD-xsl"就是一个名字空间(namespace),我们在上面关于XML Schema语法介绍的时候已经进行过介绍。这是一个标准的名字空间。"stylesheet","template","for-each"等等关键字都是这个名字空间所定义的。
  
    当然在xsl:stylesheet还可以设定其他的属性,其他的属性有:
  
     1. default-space:决定是否保留XML文件中的空白,仅当值为"default"时保留。
  
     2. indent-result:决定是否保留XSL文件中的空白,值为"yes"时保留。
  
     3. language:设定在XSL文件中使用的脚本语言。
  
    然后,我们在上面的代码中看到有如下的代码:
  
    <xsl:template match="/">
      ………
    </xsl:template>
  
    这里实际上是表示了XSL解析器对XML文档的处理过程,它从根节点(由match="/"决定,这里"/"就表示根节点)开始,对XML文档进行遍历,并根据具体的代码从XML文档中取出相关的内容。这里关于属性match的取值是一个比较复杂的问题。它实际上表示的含义是从XML文档中取出一个特定的节点集合(XML文档可以被看成一个树的结构,这个在后面关于XML解析器分析中有详细的介绍)。这里,我们通过几个简单的例子来说明属性match的取值。
  
    比如下面一行代码:
  
    <xsl:template match="/">
  
    这行代码的意思是告诉XSL解析程序,当前需要处理的节点是根节点下的内容(用"/"来表示根节点),其实这里的match值内容的编写是要符合XPath的语意。关于XPath我们在后面的章节中会进行详细的介绍。
  
    再举一个例子:
  
    <xsl:template match="shoppingcart/item">
  
    这行代码要匹配的是shoppingcart元素下的item元素。而不管shoppingcart在XML文档结构树下的哪一个位置。比如XML文档的其中一段是这样的。
  
    <shoppingcart>
    <item>
    <itemNo>3333</itemNo>
    <itemName>屠龙刀</itemName>
    </item>
    <item>
    <itemNo>4444</itemNo>
    <itemName>离别钩</itemName>
    </item>
    </shoppingcart>
  
    那么它匹配的内容就是
     <item>
     <itemNo>3333</itemNo>
     <itemName>屠龙刀</itemName>
     </item>
     <item>
     <itemNo>4444</itemNo>
     <itemName>离别钩</itemName>
     </item>
  
    而下面这个例子:
  
    <xsl:template match="/shoppingcart/item">
  
  表示只匹配XML文档根节点下的shoppingcart这个节点下的所有item元素。也就是说如果shoppingcart不是直接在根节点下的,它就不符合这个匹配条件。
  
    再看一个例子:
  
    <xsl:template match="price[@unit='USD']">
  
  这个例子说明要匹配的是这样的节点:一个带unit属性的元素price,而且unit的值必须为"USD"。比如一段XML代码是这样的。
  
    <price>
     <unit>USD</unit>
     <amount>100</amount>
    </price>
    <price>
     <unit>RMB</unit>
     <amount>300</amount>
    </price>
  
    那么它匹配的内容就是:
  
    <price>
     <unit>USD</unit>
     <amount>100</amount>
    </price>
  
    实际上,存在许多各种符号用来表示匹配规则,我们在XPath语法介绍中会详细涉及到。现在知道这么一个大概的概念就可以了。
  
    我们用<xsl:template match="具体匹配表达式">这条语句找到了一些节点集合以后,我们就要从这个集合中找到特定的元素或者元素属性的值,那么采用什么语句呢?就是用xsl:value-of select = ""这样的语句来寻找特定的内容。
  
    比如下面的例子中<xsl:value-of select="名称"/>这行代码就是表示定位XML文档中的名称元素的内容。在指定集合中可能存在多个名字元素,如果我们需要把它们一一列举出来进行处理的话,就需要用到语句xsl:for-each select = "",注意这里涉及到一个作用范围的概念,也就是说xsl:for-each select = ""这条语句是在一个指定的集合空间中执行的。比如上面例子中如下的代码
  
    这里的<xsl:for-each select="词语">是在<xsl:template match="网络用语集合">所指定的集合空间里面寻找元素"词语"的。
  
    同时,我们需要注意的是上面的代码中,出现了一条语句
  
     <xsl:apply-templates select="网络用语集合" />
  
    它表示什么意思呢,它实际上相当于C++中的一个过程调用,当XSL解析器执行到该语句的时候,它就会在代码中寻找以<?xml:namespace prefix = xsl /><xsl:template match="网络用语集合">开头的代码,所以在上面的例子程序中,以下的代码可以看成是过程的实现。
  
    
    把看成是一个过程调用,把<xsl:template match="网络用语集合">
  
    …….
    </xsl:template>
  
    看成是过程的实现,有助于我们对XSL解析器执行过程的理解。这里match="网络用语集合"可以理解为是传递给过程的参数,它表示过程实现体的集合范围是该match所匹配的节点集合空间("网络用语集合")。
  
    如果我们要对表格中的元素进行排序该什么办呢?比如说,在上面的例子中,我们需要按照名称进行排序。很简单对,改写为如下的形式即可:
  
    <xsl:for-each select="词语" order-by="+名称">,其中"+"表示按降序排列;"-"表示按升序排列。"order-by"是XSL语法中的关键字。
  
    如果我们只想在列表中取出某几行该怎么操作呢?比如我们只想取出名称为"恐龙"的行,见下面的代码:
  
    这里有一个新的句法为:<xsl:template match="网络用语集合">
    <table Border="1">
     <xsl:for-each select="词语" order-by="-名称">
     <xsl:if test=".[名称='恐龙']">
     <tr>
      <td><xsl:value-of select="名称"/></td>
      <td><xsl:value-of select="含义"/></td>
     </xsl:if>
     </xsl:for-each>
    </table>
    </xsl:template>
  
    
  
    它表示如果".[名称='恐龙']"为真(TRUE)的话,就执行该段里面的语句,要是为假(FALSE)的话就不执行。它和C++中的if语句的概念基本是一样的。
  
    前面我们用<xsl:value-of select=""/>取出的都是一个元素的值,但是我们要取出元素某一个属性的值该怎么做呢?采用下面的形式:
  
    <xsl:value-of select="元素名称/@属性名称"/>
  
    比如一段XML代码是这样的:
  
    <王朔 网址="www.wangshuo.com">知名作家加著名评论家王朔先生的地方</王朔>
  
    我们可以用<xsl:value-of select="王朔/@网址"/>来得到值"www.wangshuo.com"。
  
    以上包括了XSL的大多数基本的语法,更加详细和完整的介绍需要参看W3C相关的最新的文档,可以在WWW.W3C.ORG/TR下找到。
  
    根据上面的分析,我们可以看到XSL实际上采用的是一种转换的思想,它最终将XML文档转换为另一种可用于输出的文档,而CSS则没有任何转换动作,在整个过程中没有任何新码产生。 另外,在XSL中90%的样式规定在CSS中都有定义,但仍然有一些效果是CSS无法描述的,必须使用XSL不可。这些功能包括文本的置换、根据文本内容决定显示方式、文档内容排序等,都是XSL所独有的。再者,XSL遵从XML的语法,而CSS的语法自成体系。
  
    选择样式单还要考虑不同浏览器对样式单的支持程度。目前IE5与Netscape的最新版本都支持CSS,但支持的程度都有限。至今为止,IE5尚不能完全支持CSS1,即便是支持的部分也存在很多错误,对于CSS2也只提供部分支持。Netscape在对CSS的支持上已经优于IE5,它采用新一代的Raptor/Gecko引擎技术,已经能够完全支持CSS1,但对CSS2的支持计划尚不明朗。而对XSLT而言,只有IE5支持,Netscape5并不支持。
  
  
  
  

时间: 2024-09-23 04:04:30

XSL语法介绍的相关文章

XSL 语法简介(一)

语法 XSL语法介绍 首先注意到的是,XSL文件本身即是一份 XML文件,所以在XSL文件的开头,一样有和XML文件相同的声明.W3C这个XML的标准机构为XSL定义了很多标记(元素),XSL文件就是这些标记和HTML标记的组合.在XSL文件中,必须有如下一行的代码:  <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">  这里,xsl:stylesheet是XSL文件的根元素,在根元素中包含了所有的排版样式,样

基于Predictive Parsing的ABNF语法介绍

最近一直在做Session Initiation Protocol (SIP)协议方面的开发,SIP在电信VoIP领域应用非常广泛,是一个基于 文本语法的协议.SIP的语法规范是使用ABNF来定义的.对SIP语法有兴趣的同学请移步其Augmented BNF for the SIP Protocol章节.Augmented BNF for Syntax Specifications: ABNF本身也是一种语法规范,ABNF形式上可以由其自身来定 义,有兴趣的童鞋请参考其第4章"ABNF Defi

markdown简介和语法介绍_相关技巧

一.前言 之前有了解过markdown,但一直没实际使用,今天试用了下,感觉很爽,推荐给大家,特别是在编写规范.接口文档等方面非常适合,因为其简单易用也有很多人用来写网络小说. 二.介绍 Markdown 的目标是实现易读易写,可以直接在问编辑器书写和保存,除本身具有非常好的可读写外,还可以生存格式非常好看的html代码发布在互联网中. Markdown 不是想要取代 HTML,甚至也没有要和它相近,它的语法种类很少,只对应 HTML 标记的一小部分.Markdown 的构想不是要使得 HTML

XSL函数介绍(1)

  本期介绍多个XSL对于VBScript.JScript增加的方法.属性,以充分发挥XML的优势,用于< xsl:script >.< xsl:eval >标记内表达式的编写或< xsl:if >.< xsl:when >的expr属性. 一.absoluteChildNumber  含义:返回结点相对于它所有的兄弟(不论名字是否相同)的序号 语法:absoluteChildNumber(node) 参数:node ── 对象,欲返回编号的结点. 示例:

Groovy语法介绍

1. 介绍 Groovy 是基于 JRE 的脚本语言,和Perl,Python等等脚本语言一样,它能以快速简洁的方式来完成一些工作:如访问数据库,编写单元测试用例,快速实现产品原型等等. Groovy 是由James Strachan 和 Bob McWhirter 这两位天才发明的(JSR 241 2004 年 3 月).Groovy 完全以Java API为基础,使用了Java开发人员最熟悉的功能和库.Groovy 的语法近似Java,并吸收了 Ruby 的一些特点,因此 Groovy 在某

asp+语法介绍(一)

asp+|语法 /* 文章出处:http://www.aspCool.com 转载请注明处处,谢谢! */ASP+ 现在支持两种语言C# (简称 "C Sharp"), Visual Basic, and JScript. 基于习惯,在以下的语言介绍中,我们采用的练习和例程采用VB和C#语言来开发Web应用程序.如果想要得到关于.Net技术的详细资料,请去MS的站点 查看关于 NGWS SDK! 在下面的列表中,你可以看到关于这两种语言的语法的简要介绍 1.变量声名 C# 语法 int

asp+语法介绍(二)-书写我们的第一个asp+ 文件

asp+|语法 /* 文章出处:http://www.aspCool.com 转载请注明,谢谢! */ asp+ 页面的文件和asp 一样,也是一个 文本的文件,但是他的后缀名称已经不再是 .asp 而是 .asp+ 当客户端浏览器向 IIS 发出.aspx 的文件请求后,IIS 会 首先将.aspx文件编译成运行状态的NGWS 类文件来运行,请注意,这个编译的过程只在第一次运行的时候发生,以后就直接以运行态的NGWS 类运行了(和 .jsp 是不是很类似??--豆腐添加,原文没有) 一个 最简

asp+语法介绍(三)----asp+的服务器端编程初步

asp+|编程|服务器|语法|服务器 /* 文章出处:http://www.aspCool.com 转载请注明,谢谢! */ 这一章介绍关于Asp+的服务器端的控件 除了使用<%%>号以外,asp+ 的程序开发者目前可以使用新的标签来生成动态的页面了,新的服务器控可以在asp+ 文件中利用一个特殊的tag runat=server来声明 下面的例子中用到了以下几个服务器控件, , , and 在运行的过程中他们都会自动生成HTML代码 Name: Category: psychology bu

asp+语法介绍(六)----数据库篇

asp+|数据|数据库|语法 /*文章出处:http://www.aspCool.com 转载请注明,谢谢!*/列表,数据和数据棒定asp+ 给我们提供了一套数据表格和数据列表的控件.这些控件可以帮助我们定制我们UI(user interFace 用户界面)而不去考虑一种数据库或者其他的数据库.例如:在下面的例子中,我们将要介绍一下<asp:datagrid runat=server>控件是怎么样通过sql 语句给我们提供数据的<%@ Import Namespace="Sys