XSL语法介绍
首先注意到的是,XSL文件本身即是一份 XML文件,所以在XSL文件的开头,一样有和XML文件相同的声明。W3C这个XML的标准机构为XSL定义了很多标记(元素),XSL文件就是这些标记和HTML标记的组合。在XSL文件中,必须有如下一行的代码:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl%22>
这里,xsl:stylesheet是XSL文件的根元素,在根元素中包含了所有的排版样式,样式表就是由这些排版样式组合成的;xmlns:xsl="http://www.w3.org/TR/WD-xsl%22这一句主要用来说明该XSL样式表是使用W3C所制定的XSL,设定值就是XSL规范所在的URL地址。
实际上,这里"http://www.w3.org/TR/WD-xsl%22就是一个名字空间(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代码是这样的:
<王朔 网址="http://www.wangshuo.com/">知名作家加著名评论家王朔先生的地方</王朔>
我们可以用<xsl:value-of select="王朔/@网址"/>来得到值"http://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:choose><xsl:when test="expression"><xsl:otherwise>...</xsl:otherwise></xsl:choose>` - **属性**:无 - **示例**: ```xml <xsl:template match="book"> <xsl:choose> <xsl:when test=...
它通常包含了XSL函数、元素和XPath的详细列表,以及它们的语法和用法。这可以帮助开发者快速查找并回忆起特定的功能,提高工作效率。 综上所述,XSL开发基础参考资料涵盖了XSL函数、XSL元素、XPath和XSL知识速查的...
- **XSL_tour.CHM**:可能是一个完整的XSL参考手册,包含XSL的全面介绍和详细指南。 - **跟我学XSL(一)-XML教程,样式表技术.htm** 和 **跟我学XSL(一)、(二).mht**:这些文件提供逐步的学习指导,帮助初学者...
### XSL 学习知识点详解 #### 一、XSL 概述 XSL(Extensible Stylesheet Language,可扩展样式表语言)是一种...通过理解 XSL 的基本概念、语法以及 XPath 的使用方法,开发者可以更好地利用 XSL 来满足不同的需求。
此外,熟悉XPath的语法和功能对于有效使用XSL至关重要,因为XPath是XSLT中定位和操作XML数据的主要工具。 五、实际应用 XSL在许多领域都有广泛应用,如网页动态生成、数据交换、报告生成等。通过XSL,开发者可以...
### XSLT元素详解 #### <xsl:apply-imports>元素 **定义与用法:** ...以上只是XSLT中众多元素的一部分介绍,XSLT的强大在于它的灵活性和控制能力,通过组合这些基本元素,你可以实现对XML数据的复杂转换和呈现。
- **语法**:XML文档遵循严格的语法规则,包括元素、属性、文本内容、注释和处理指令等。 - **命名规则**:元素和属性名必须以字母或下划线开头,不能包含空格和某些特殊字符。 - **结构**:XML文档具有层级结构...
在“xsl学习资料”中,可能包含了关于XSLT的基本概念、语法示例、以及实际应用的教程。由于描述中提到了“(一)还有(二)”,这暗示着学习资料可能是分两部分的,第一部分可能介绍了基础概念和基本操作,而第二...
它提供了一种简洁的语法,用于定位XML文档中的元素、属性和其他节点。XPath表达式可以返回单个节点、一组节点,甚至是节点的值。在XSLT中,XPath经常用来选取要处理的XML数据。 XSL-FO是XSL的格式化部分,它定义了...
XSL(Extensible ...对于初学者来说,从理解基本概念和语法开始,然后逐步实践,通过创建简单的转换项目来加深理解,是学习XSL的有效途径。记住,实践是最好的老师,不断尝试和改进,你将在XSL的世界中游刃有余。
3. **XSLT的语法**:介绍模板规则、选择符、模式匹配、变量和参数的使用,以及如何控制流结构(如if、for-each等)。 4. **XPath的详解**:讲解XPath表达式的构造,包括节点类型(元素、属性、文本等)、路径表达式...
3. **语法规则**:XML文档必须遵循一定的语法规则,例如每个标签必须有对应的结束标签,属性值必须用引号包围等。 4. **命名空间**:XML支持命名空间,可以避免标签名称冲突,尤其是在集成来自多个来源的数据时。 5....
- **熟悉HTML 4.0与CSS 2.0**:了解HTML和CSS的基本语法有助于更好地理解XSL的工作原理。 - **掌握脚本语言**:了解JavaScript或VBScript等脚本语言对于使用XSL进行复杂操作非常有帮助。 - **编程经验和数据库知识**...
1. **XML和XSL文件格式验证**:此工具能快速检查XML和XSL文件的语法是否符合规范,确保文件的合法性。这对于开发人员来说是一项非常实用的功能,可以减少手动检查的时间和可能出现的错误。 2. **生成HTML输出**:当...
《XSL语法详解——XML与JSP的交互实践》 XSL(Extensible Stylesheet Language)是一种用于转换XML文档的样式表语言,它为XML数据提供了强大的格式化和转换能力。XSL的主要任务是将XML数据转换成其他形式,如HTML、...
在这个主题中,我们将会深入探讨XSL的基本概念、语法以及实际应用。 【描述】虽然描述部分为空,但我们可以推断博主可能分享了一篇关于XSL学习的文章,提供了深入理解XSL的资源和实践指导。通过博文链接(已省略)...
此外,熟悉XML和DocBook的语法规则是必不可少的,因为XSLT是基于XML的,并且直接操作XML文档的结构。 总之,自定义DocBook的XSL样式表是一项技术性强、灵活性高的工作,它允许我们根据项目需求定制输出样式,提升...
而XSL则更加强大且灵活,它本身就是基于XML的,这意味着XSL文件也遵循XML的语法规则。XSL不仅能够定义样式,还能进行数据转换,包括元素的排序、过滤、复制等操作。这使得XSL在处理需要动态展示或根据条件改变元素...
通过深入理解XSLT的工作原理和语法,你可以实现更灵活和定制化的XML到HTML的转换,从而更好地满足项目需求。 总结来说,XSLT是一种强大的转换工具,能够帮助我们把XML数据转换成易于浏览器显示的HTML格式。通过学习...