|
XML 编程 XML技术讲座之八 XML文档显示与样式单(下)
可扩展样式单语言XSL XSL(eXtensible Stylesheet Languge)是描述XML文档样式信息的一种语言,是由W3C制定的。上述的层叠样式单CSS,是一种静态的样式描述格式,其本身不遵从XML的语法规范。而XSL本身就是一个XML文档,系统可以使用同一个XML解释器对XML文档及其相关的XSL文档进行解释处理。XSL最近的一个草案于2000年3月提出,尚未成为正式标准。 XSL由两大部分组成:一部分描述如何将一个XML文档转换为可浏览或可输出的格式;另一部分则定义格式对象FO(fomatted object)。在输出时,首先根据XML文档构造源树,然后根据给定的XSL将这个源树转换为可以显示的结果树,这个过程称作树转换,最后再按照FO解释结果树,产生一个可以在屏幕上、纸上、语音设备或其他媒体中输出的结果,这个过程称作格式化。 到目前为止,W3C还未能出台一个得到多方认可的FO,但是描述树转换的这一部分协议却日趋成熟,已从XSL中分离出来,另取名为XSLT(XSL Transformations),其正式推荐标准于1999年11月16日推出,现在一般所说的XSL大都指的是XSLT。与XSLT一同推出的还有其配套标准XPath,这个标准用来描述如何识别、选择、匹配XML文档中的各个构成元件,包括元素、属性、文字内容等。 使用XSL显示XML的基本思想是通过定义模板将XML源文档转换为带样式信息的可浏览文档。最终的可浏览文档可以是HTML格式、带CSS的XML格式及FO格式。 在XML中使用如下语句声明XSL样式单: <?xml-stylesheet type="text/xsl" href="mystyle.xsl"?> XSL在网络中的应用大体分为两种模式: 1.服务器端转换模式 在这种模式下,XML文件下载到浏览器前先转换成HTML,然后再将HTML文件送往客户端进行浏览。有两种方式:
2.客户端转换模式 这种方式是将XML和XSL文件都传送到客户端,由浏览器实时转换。前提是浏览器必须支持XML+XSL。 下面是XSLT的一个简单的例子,通过剖析这个例子,即可掌握XSLT的基本功能。 例子仍然使用前述的顾客信息表的例子,其XML文档与DTD文档请参照CSS部分,只是XML文档的引用样式要改为: <?xml-stylesheet type="text/xsl" href="mystyle.xsl"?> mystyle.xsl文档如下: 将例中的XML文档用XSL样式转换为HTML文档的步骤是:先用XML解释器将XML文档解释成DOM对象,相当于建立了原文档的一个节点树。然后用XML解释器解释XSL文档,用模板匹配的方法去遍历XML节点树,将树中的节点按模板的设定转换为模板指示的显示语言。 为看懂例中的XSL源码,首先介绍一下XSL主要的几条语句: Xsl:stylesheet Xsl:template Xsl:template match = "" Xsl:apply-templates Xsl:apply-templates select
="" xsl:for-each select = "" xsl:value-of select = "" 知道了上面的语句含义,现在就可以分析一下上面的源代码了: 1.用<xsl:template> <xsl:apply-templates/> </xsl:template>声明XSL模板,并调用该模板。 2.系统最先匹配XML原树的根节点,根节点用"/"表示。将根节点转换为带有样式信息的HTML文档的开头的一段代码:
然后再调用另一个节点模板,相当于根节点模板的子函数,处理根节点下的子节点"顾客信息表"的模板转换。之后再把HTML的结尾部分添在根节点模板的后面,使其成为一个完整的HTML文档。 3.匹配学生花名册子节点。建立一个表头为"姓名"、"序号"、"地址"、"电话"的表格,并循环遍历"customer"节点,将每个"customer"节点的上述四个属性值取出,放在表格中。读者可自己仔细研究一下这几句,笔者不再赘述。 如何选择样式单 CSS和XSL同属于样式单,它们的区别表现在于CSS既可用于HTML,也可用于XML。但XSL是专门针对XML提出的,它不能处理HTML文档。 另外XSL是一种转换的思想,它最终将XML文档转换为另一种可用于输出的文档,而CSS则没有任何转换动作,在整个过程中没有任何新码产生。 XSL中90%的样式规定在CSS中都有定义,但仍然有一些效果是CSS无法描述的,必须使用XSL不可。这些功能包括文本的置换、根据文本内容决定显示方式、文档内容排序等,都是XSL所独有的。 再者,XSL遵从XML的语法,而CSS的语法自成体系。 选择样式单还要考虑不同浏览器对样式单的支持程度。目前IE5与Mozilla(即Netscape5.0)都支持CSS,但支持的程度都有限。至今为止,IE5尚不能完全支持CSS1,即便是支持的部分也存在很多错误,对于CSS2也只提供部分支持。Mozilla在对CSS的支持上已经优于IE5,它采用新一代的Raptor/Gecko引擎技术,已经能够完全支持CSS1,但对CSS2的支持计划尚不明朗。对XSLT而言,只有IE5支持,Netscape5并不支持。 另外,为弥补传统页面在表现力上的不足,W3C又公布了很多利用XML定义的新标准,如SVG,MathML。其中SVG针对于矢量图形的显示与传输,MathML针对于数学公式的显示与传输,对于这一类XML文档,需要另外开发单独的浏览器或插件,目前还没有达到实用的阶段。 综上所述,一个XML文档的显示方式可以归纳为三种方式:即利用CSS显示、利用XSL转化为FO显示、、利用XSL转化为带有CSS的HTML文档显示。 来源:网络世界 |