用XSLT 2.0生成PHP
http://tech.ddvip.com 2007年10月25日 社区交流
内容摘要:这是由两部分组成的关于 XSLT 的系列文章的第 2 部分,Jack Herrington 将介绍如何扩展第 1 部分中建立的 XSLT 2.0 代码生成器,以便生成代码的 PHP 部分,为 Web 服务器提供数据库访问。
但是这些模板的输出怎么办呢?这就要用到新的 xsl:result-document 标签(参见清单 3)。
清单 3. 调用 SQL 模板的代码
<xsl:result-document href="db/gen-tables.sql" format="sql" >
<xsl:apply-templates mode="sql" select="$sql-model/sql" />
</xsl:result-document>
一般说来,模板输出到运行 XSL 转换器时所指定的输出文件,通常是一个文件或者标准输出(及控制台或者默认的输出文件)。在 XSL 模板中使用 xsl:result-document 标签,可以指定新的文件来保存输出。该例中将把输出发送到文件 db/gen-tables.sql 中。XSL 的这一新特性对于代码生成而言至关重要,因为常常需要从一段 XML 输入创建多个输出文件。
XSLT 2.0 中修改的另一个重要标签是 xsl:variable。和 xsl:result-document 标签一样,xsl:variable 改变了其中嵌套标签的输出结果的走向。这些嵌套标签不是输出到文件中,而是输出到内存中的临时变量中。该例中将调用的模板的输出放到变量 sql-model 中(参见清单 4)。这个变量实际上是一个 XML 树,以后可将其他模板应用于该树。
清单 4. 创建临时树变量的代码
<xsl:variable name="sql-model">
<xsl:call-template name="gen-sql-model">
<xsl:with-param name="model" select="."/>
</xsl:call-template>
</xsl:variable>
同时在内存中拥有多个 XML 树这种能力大大增强了 XSL 的应用范围。通过它可以建立更大的模板系统,同时又降低了每个模板的复杂性。
来源:ibm 作者:Jack Herrington 责编:豆豆技术应用