`
happmaoo
  • 浏览: 4342704 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多
  首先注意到的是,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并不支持。
分享到:
评论

相关推荐

    XSL.rar_ XML-JSP_.CHM_XML chm_xml xsl_xsl

    XSL语法详细参考手册,XML设计者的理想教材

    XPath教程

    介绍XSL语法中Xpath的使用方法

    xsl学习笔记,入门知识

    xsl 简单实例,入门知识,xsl的简单语法介绍,适合初学者了解xsl使用。

    asp.net知识库

    XSL语法介绍 XSL学习心得 - 调用属性值 XSLT与XML转换的详细介绍 功能应用 读写搜索 基础教程 RSS Web2.0时代,RSS你会用了吗?(技术实现总结) 知识集锦:三分钟全面了解 Blog 和 RSS C#+ASP.NET开发基于Web的RSS...

    Emmet命令大集(HTML+CSS+XSL)CHM

    涵盖了 html、css 和 xsl 的Emmet命令,提高前端开发效率。 有基础语法:下级: &gt;;同级: +;上级:^;分组:();乘法:*;自增符号:$;ID和Class属性;自定义属性;文本:{};隐式标签; html语法:略!(此处略,...

    UltraEdit-UE-600多个语法高亮文件-最全-最完整-打包(共673个)

    dir *.uew /w ... xhtml11.uew xhtmlbasic.uew ...xsl.uew XYplorer.uew Y!WE.uew yaml.uew yang.uew zillions.uew zmud.uew zope.uew zOSasm.uew 673 个文件 4,959,962 字节 0 个目录 328,660,770,816 可用字节

    Xslt语法参考手册.pdf

    在计算机科学中,XSLT是扩展样式表转换语言(Extensible Stylesheet Language Transformations)的简称,这是一种对XML文档进行转化的语言,XSLT中的T代表...它是XSL(Extensiblestylesheetlanguage)规范的一部分。

    Nstag-开源

    命名空间模板引擎(PHP扩展)-具有类似XSL语法的功能强大的Tokenizer驱动的模板引擎。 Nstag的工作原理是在单独的命名空间中具有特殊的标签,以应用视图相关的逻辑或仅进行分配。

    jsp简单语法,servlet,JSP概述,JSP页面构成,注释,指令,脚本元素,动作元素,错误处理

    jsp简单语法,servlet,JSP概述,JSP页面构成,注释,指令,脚本元素,动作元素,错误处理

    docx-xslt:Microsoft Word .docx 模板文件的 XSL 转换

    docx-xslt docx-xslt是一个 ... 元文本具有以下语法: &lt;meta text&gt; ::= &lt;command&gt; &lt;command&gt; ::= &lt;command&gt; | &lt;command&gt; &lt;command&gt; ::= 'xsl' ':' &lt;context&gt; &lt;xsl&gt; &lt;xsl&gt; &lt;context&gt; ::= ':' &lt;context&gt; | &lt;

    focheck:使用RELAX NG和Schematron的XSL-FO验证

    focheck在oXygen框架中捆绑了Relaxing NG模式和Schematron语法,以便在oXygen XML Editor中对XSL-FO(包括FO和XSL 1.1中添加的属性)进行详细验证。 focheck还可以验证AH Formatter提供的扩展名FO和属性,以改善格式...

    rng.xsl:Relax NG的XSLT 2.0实现

    它利用XSLT对XML和XSD基本原子类型的基本支持,支持XML语法和XSD数据类型。 rng.xsl不是流验证器,它适用于内存中的文档。 与大多数Relax NG实现不同,它不使用算法。 取而代之的是,它遍历架构并从验证文档中提取...

    UNIMARC-to-RDF:将 MARCXML 中的 UNIMARC 的 XSL 转换为 RDF

    XSL 转换将在语法中序列化的转换为 RDF。 用法 驱动转换的主要 XSL 是 。 此样式表导入一个小和一个从 9XX 范围。 您可以使用本地定义字段的映射覆盖导入的样式表。 样式表接受一个名为ns参数,该参数设置将在其中...

    基于pdfbox/fop二次封装的框架,一个用搭积木的方式构建pdf的框架

    【fop模块】主打pdf导出功能,采用数据源的方式对xsl-fo模板进行转换,同时提供java对象的方式构建dom模板文档,即使完全不懂xsl-fo的语法,也能轻松上手写出对应的模板。两个模块均可单独使用,也可以结合使用,...

    一个用搭积木的方式构建pdf的框架(基于pdfbox/fop)

    【fop模块】主打pdf导出功能,采用数据源的方式对xsl-fo模板进行转换,同时提供java对象的方式构建dom模板文档,即使完全不懂xsl-fo的语法,也能轻松上手写出对应的模板。两个模块均可单独使用,也可以结合使用,...

    x-easypdf是一个基于pdfbox/fop二次封装的框架

    【fop模块】主打pdf导出功能,采用数据源的方式对xsl-fo模板进行转换,同时提供java对象的方式构建dom模板文档,即使完全不懂xsl-fo的语法,也能轻松上手写出对应的模板。两个模块均可单独使用,也可以结合使用,...

    xml实用大全和轻松学习手册和无废话xml

    14.9.3 使用xsl:attribute将特性插入到输出文档中 476 14.9.4 定义特性集合 477 14.9.5 使用xsl:pi生成处理指令 478 14.9.6 使用xsl:comment生成注释 478 14.9.7 使用xsl:text生成文本 479 14.10 使用xsl:copy复制...

    SynCode Exporter(语法突出格式刷) v1.3

    快速、高效地帮助您把您拥有的源代码文件转换成标准 htm 文件,方便您继续用 Word 编辑、打印、或者制作网站、打印《软件著作权登记》材料、制作教学幻灯片、...*.xsl;*.xslt;*.dtd)  13、MS-DOS Batch Files (*.bat

    很经典的XML入门教程

    第三章:XML 的语法 第四章:文档类型定义 DTD(Document Type Definition) 第五章:在NetScape 和IE 中的XML 第六章:微软的XML 解释器 第七章:XML DOM 第八章:XSL - The Style Sheet Language of XML(XML 的样式...

    DREAMWEAVER与XML综合应用

    第6章介绍如何使用Dreamweaver可视化地创建XSL来格式化XML,以及使用XSL、处理程序、XSL模式语言、XSL查询语言等。第7章涉及名域的必要性、名域的声明及应用、名域的范畴以及预设的名域等。第8章首先概述一些有关DTD...

Global site tag (gtag.js) - Google Analytics