热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

XSL语法简介(一)_xml

XSL语法介绍<xsl:stylesheet xmlns:xsl>这里,xsl:stylesheet是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文件的根元素,在根元素中包含了所有的排版样式,样式表就是由这些排版样式组合成的;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> 

http://www.gaodaima.com/34094.htmlXSL 语法简介(一)_xml

  </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=”[email protected]”/> 

  比如一段XML代码是这样的: 

  <王朔 网址=”http://www.wangshuo.com“>知名作家加著名评论家王朔先生的地方</王朔> 

  我们可以用<xsl:value-of select=”[email protected]”/>来得到值”http://www.wangshuo.com“。 

  以上包括了XSL的大多数基本的语法,更加详细和完整的介绍需要参看W3C相关的最新的文档,可以http://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并不支持。

欢迎大家阅读《XSL 语法简介(一)_xml》,跪求各位点评,若觉得好的话请收藏本文,by



推荐阅读
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 在HTML布局中,即使将 `top: 0%` 和 `left: 0%` 设置为元素的定位属性,浏览器中仍然会出现空白填充。这个问题通常与默认的浏览器样式、盒模型或父元素的定位方式有关。为了消除这些空白,可以考虑重置浏览器的默认样式,确保父元素的定位方式正确,并检查是否有其他CSS规则影响了元素的位置。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 深入解析HTML5字符集属性:charset与defaultCharset
    本文将详细介绍HTML5中新增的字符集属性charset和defaultCharset,帮助开发者更好地理解和应用这些属性,以确保网页在不同环境下的正确显示。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 使用jqTransform插件美化表单
    jqTransform 是由 DFC Engineering 开发的一款 jQuery 插件,专用于美化表单元素,操作简便,能够美化包括输入框、单选按钮、多行文本域、下拉选择框和复选框在内的所有表单元素。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • Vim 编辑器功能强大,但其默认的配色方案往往不尽如人意,尤其是注释颜色为蓝色时,对眼睛极为不友好。为了提升编程体验,自定义配色方案显得尤为重要。通过合理调整颜色,不仅可以减轻视觉疲劳,还能显著提高编码效率和兴趣。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文深入解析了通过JDBC实现ActiveMQ消息持久化的机制。JDBC能够将消息可靠地存储在多种关系型数据库中,如MySQL、SQL Server、Oracle和DB2等。采用JDBC持久化方式时,数据库会自动生成三个关键表:`activemq_msgs`、`activemq_lock`和`activemq_ACKS`,分别用于存储消息数据、锁定信息和确认状态。这种机制不仅提高了消息的可靠性,还增强了系统的可扩展性和容错能力。 ... [详细]
  • 在关系型数据库中,数据约束是指在向数据表中插入数据时必须遵循的限制条件。在MySQL和MariaDB中,常见的数据约束包括主键约束、唯一键约束、外键约束以及非空约束等。这些约束确保了数据的完整性和一致性,是数据库管理中的重要组成部分。通过合理设置和使用这些约束,可以有效防止数据冗余和错误,提升数据库的可靠性和性能。 ... [详细]
  • 资源管理器的基础架构包括三个核心组件:1)资源池,用于将CPU和内存等资源分配给不同的容器;2)负载组,负责承载任务并将其分配到相应的资源池;3)分类函数,用于将不同的会话映射到合适的负载组。该系统提供了两种主要的资源管理策略。 ... [详细]
  • AngularJS 进阶指南:第三部分深入解析
    在本文中,我们将深入探讨 AngularJS 的指令模型,特别是 `ng-model` 指令。`ng-model` 指令用于将 HTML 元素与应用程序数据进行双向绑定,支持多种数据类型验证,如数字、电子邮件地址和必填项检查。此外,我们还将介绍如何利用该指令优化表单验证和数据处理流程,提升开发效率和用户体验。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
author-avatar
慈禧太后她妈_151
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有