有一句古老的编程格言说:“优秀的程序员写优秀的代码﹔伟大的程序员偷别人的代码。”撇开伦理道德不谈,这句话道出了软件重用的重要性,用它来形容XSLT开发再贴切不过了。创建通用和可重用转换(Transformation)的能力对于一个XML项目的成功具有非常重要的作用。XSLT标准库(XSLTSL)是一个SourceForge(开发源码)的项目,目的在于提供一个标准的转换集合,方便开发者的使用。
XSLTSL项目的目标似乎够简单的了:提供标准化的转换集合,让产品厂商可以将它们包在他们的软件之中,设计一种用于创建XSLT样式表(Stylesheet)的模型,并提供可以用于开发样式表的技巧。这些目标可能从表面上看似乎没什么意义,但其实它们具有非常重要的潜在价值。该项目根本性的目标是提供一种类似于C的标准库或者C++的STL(标准模板库)的东西。如果工具厂商们都包括这个库的话,那么开发者就能够更快速的开发,而不必亲自创建这些样式表,同时他们开发出来的产品还将具备在所有支持该库的工具之间的可移植性。不幸的是,他们也可能会失去一些在不支持该库的平台上的移植能力。
该库提供了几类函数,包括字符串、结点、日期、时间、URI(统一资源标识符)以及XML标记等好几方面的函数。在这里面的每一类中,都包含有一些用来解决XML开发中可能遇到的许多常见问题的操作。
字符串(String)函数
字符串函数在XML中是很常见的,因为XML从本质上是说就是一个文本字符串。不仅文档文本是字符串,而且每个元素中的数据也都是字符串。字符串函数的价值在于它为生成更加匹配应用需求的新字符串提供了解析、重组和删除部分子串的能力。XSLTSL字符串函数包括的基本操作如大写、小写、camel-casing、提取子串、字符串替换和模式匹配等。
许多遗留应用要求数据全以大写形式表达,特别是名字和地址等。下面是一个如何使用XSLTSL函数将一个字符串转换成大写的例子程序:
<xsl:call-template name="str:to-upper">
<xsl:with-param name="text">Brian Schaffner</xsl:with-param>
</xsl:call-template>
结点(Node)函数
结点函数对XML文档中的结点进行操作。结点基本上是文档中粒度很小的部分(如一个元素或者一个备注)。XSLTSL只包括两个结点函数,分别用于判断结点的XPath定位和结点的类型。
XPath函数用于把一个定位从XSLT语法转换成XPath语法。结点类型函数用于判断一个结点是元素类型、备注类型、处理指令,还是文本。