本节书摘来自异步社区《重构HTML:改善Web应用的设计(修订版)》一书中的第2章,第2.7节,作者: 【美】Elliotte Rusty Harold 更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.7 XSLT
在HTML转换为良构的XHTML后,XSLT(Extensible Stylesheet Language Transformations,可扩展样式表语言转换)是众多可运行在HTML文档上的XML工具之一。实际上,它是我最中意的工具之一,也是解决各种任务要做的第一件事。例如,我用它自动生成很多内容,比如通过HTML页面的零星整理生成RSS和Atom feed。为了能在文档上使用XSLT实际上也是重构文档为良构的XHTML的最大理由之一。XSLT可以查到文档需要修复的问题,并能自动化一些修复工作。
用XSLT来重构XHTML通常不需太多的改动。因此,大部分重构样式表是以代码清单2-9中的标识转换开始的。
代码清单2-9 XSLT中的标识转换
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
version='1.0'>
xmlns:html='http://www.w3.org/1999/xhtml'
xmlns='http://www.w3.org/1999/xhtml'
exclude-result-prefixes='html'>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
虽然这只不过是将整个文档从输入复制到输出,但之后你就可以按照需求用一些额外的规则修改这个基本的样式表。例如,假如要把废弃的元素转换为元素,你可以添加如下规则:
<xsl:template match='html:i'>
<em>
<xsl:apply-templates select="@*|node()"/>
</em>
</xsl:template>
需要注意的是,在match属性中XPath表达式必须使用命名空间前缀,尽管需要匹配的元素使用的是默认的命名空间。在转换XHTML文档时,这是一个常见的疑问。在XPath表达式中使用XHTML命名空间时,记住你必须总要赋予它一个前缀。
注解
介绍XSLT的好文章在书中或网上都可以找到。首先推荐我写的两篇。The XML 1.1 Bible(Wiley,2003)第15章包括了XSLT的深度介绍,它也可在www.cafeconleche.org/books/bible3/chapters/ch15.html上找到。Elliotte Harold和W. Scott Means著的XML in a Nutshell,3rd Edition(O’Reilly,2004)提供更为详细的介绍。最后,如果想了解得更深入,我推荐Michael Kay 的XSLT: Programmer’s Reference(Wrox,2001)和XSLT 2.0: Programmer’s Reference(Wrox,2004)。