2007-9-23 12:07:49

xslt (1)

 

XSL也就是所谓的扩展风格表单语言(Extensible Stylesheet Language)由3种语言组成。这三种语言负责把XML文档转换为其他格式。XML FO (XSL格式化对象:XSL Formatting Objects)说明可视的文档格式化,而Xpath则访问XML文档的特定部分。但是XSLT(XSL Transformations)才是把某一XML文档转换为其他格式的实际语言。

  最简单的应用情况首先涉及到两个文档:包含原始数据的XML文档和用来转换该文档的XSLT风格表单。XSLT处理器把XSLT风格表单的规则应用到XML文档从而新建出XHTML、WML、SVG或者几乎其他任何XML格式的第3个文档。

 

 

  多个XSLT风格表单可以采用多种格式来表达某一文档。单一的风格表单还可以把某一数据类型的多种实例转换为标准的报告格式,你只需要修改风格表单就可以改变这些报告模式。而XSLT则可以把数据的多种实例转换为多种格式而不仅仅局限于报告格式:由此可见,XSLT是一种把某一系统的数据格式转换为另一系统(比如B2B交易)数据格式的强大工具。

XSLT从头学起

  认真学习使用XSLT的高效方法会很费时间的。在学习内容中的某些方面很具有直觉性,而其他一些方便则可能会叫人很费解。不过,一旦你熟悉了XSLT 和 Xpath,你就可以相当快地在实际环境下熟练运用XSL了。

  一开始你得需要一个XSLT处理器。随着各类技术的迅猛发展,你所采用的技术工具可能会让你所进行的项目要么成功要么毁灭。目前桌面XSLT原型工具并不多,因为这类工具大多数都针对全规模的产品系统。你必须仔细考虑使用的工具如何支持XSLT规范。

  最近推出的浏览器,比如Internet Explorer 5.5、Netscape 6.1和Mozilla等,它们都支持XSLT处理功能。它们也许就是这方面最简单的使用工具了,可是,在其支持规范方面却相当欠缺。还有,浏览器并没有支持真正的开发工具,所以在调试代码的时候毫无用处。XSLT格式转化通常在服务器上完成,所以浏览器只能对那些包含了指向风格表单链接的XML文件才有效。

  Instant Saxon 是一款用于Windows系统的命令行式的、服务器风格的XSLT简单处理器。它实现了基本的文件输出和错误信息。相比浏览器能提供更稳固的XSLT 支持。虽然这一工具还不是完全意义上的开发环境,但Instant Saxon作为实验用工具还是绰绰有余了。

  XML Spy是一套完整的XML IDE,该软件可以从网络下载评估版。它采用了Instant Saxon作为其XSLT处理器。这一产品非常适合那些在应用环境下开发XML的工程人员,不过要掌握这套工具还真得需要点时间。

  假如以上这些工具能为你所用,或者你希望自己动手建立一套完整的应用环境,我们在本文的末尾会为你列出一些基于服务器的XSLT处理器。

测试示例

  下面的例子假设XSL处理工具和XML、XSL文件都在一个目录下。在这个例子中,我们用一个XML文档表示快餐定货单,下面我们需要把这个文档转换为可读的HTML格式。

  现在请把该XML文档拷贝并且粘贴到某个文本编辑器内,然后把它另存为order.xml文件。同样的,把相应的XSL 文档拷贝为名为order.xsl的文件。这个 XML 文件链接到该 XSL风格表单,这样你就可以在合适的浏览器中查看该XML 文件,或者用XML Spy 对其进行XSL Transform 处理。接着用Instant Saxon打开一个MS-DOS命令行窗口,进到文件所在目录,键入saxon.exe order.xml order.xsl > order.html命令。

  以上命令将把转换后的HTML 结果输出为一个名为 order.html的文件,这样你就可以通过自己的浏览器查看该文件了。

  以上例子的结果如下:HTML页面的标题显示"Mike的定单(定单号734)",内容是他订购食品的列表,包括价格等。 XSLT 处理器处理了包含数据的 XML文件并把它转换为HTML输出结果。XSLT风格表单则定义了描述XML数据的 HTML标签定位,方法是采用组成XSLT语言的处理指令。

  虽然 XSLT 处理器通常接受命令采用相应的风格表单处理,不过,XML文档可以指示自己默认的XSLT风格表单,方法是在文档中包含以下行:

<?xml-stylesheet type="text/xsl" href="my.xsl"?>

  其中my.xsl是指向风格表单的URL。以上的代码对基于浏览器的格式转换是基本的要求。

XSLT风格表单
 
  为了深入理解XSLT 编程,你必须首先理解 XML,因为 XSLT不只是负责转换 XML 而且自身还是一种完全意义上的XML标准语言。在理论上,你完全可以编写负责自身格式转换的XSLT风格表单,当然这是一件满有意思的事,只是没啥用处。

  让我们回忆一下, XML 并不是一种通常意义上的语言,XML是一种元语言(metalanguage),也就是建立XML规范语言的结构(比如XSL和 XHTML就是XML规范语言)。HTML看起来很象XML,但实际上违反了好些 XML规则。

  XML 语言定义了一套用来把数据标记为元素(或者可以说节点)的标签。比方说,就XHTML语法而言,<table>标签就等于开始标记某个特定的XML节点。XML节点可以包含属性和内容体。属性是由字符串组成的名字/值对。内容体可以是字符串和/或更多的 XML节点。这就意味着,XML是一种层次化的结构,可以表示很复杂的数据格式。我们不妨考虑以下的一个XHTML片段:

<table>
<tr>
<td>Hello world!</td>
<td><img src="smiley.gif"/></td>
</tr>
</table>

  在以上的代码段中,每个节点都有自己的开-闭标签,两个标签之间是更多的节点和文本字符串。img 节点有一个src属性而没有内容,紧挨着开标签的是一个终止斜线。这个终止斜线和文本都在<td>节点内嵌套,而后者又在<tr>节点内嵌套,显然<tr>节点则在<table>内嵌套。

  XSLT 的核心思想是建立上下文环境(context),也就是在XML文档内的特定节点或者整套节点同时输出为存在于这个环境内的格式化数据版本。为此, XSLT风格表单被分解为离散的模版,每个模版负责处理XML文档内某类型的标签。在这些模版内,XSLT要用到标量、传递参数、循环条件以及其他转换XML的元件。

  <xsl:stylesheet>元素是任何XSLT风格表单的最外层元素,你要为其指定版本和一个或者多个名称空间(namespace):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform>

</xsl:stylesheet>

  你可以设置其他属性,但是,对几乎所有的基本风格表单来说,你可以原样使用这些<xsl:stylesheet>标签。其中就可以嵌套模版元素了。


推荐到鲜果:
下一篇:XSlt(2)

评论

您正在以 匿名用户 的身份发表评论  快速登录
(不得超过 50 个汉字)
       看不清,换一个
提示消息
(输入完内容可以直接按Ctrl+Enter提交)