用XSLT 2.0生成PHP

http://tech.ddvip.com   2007年10月25日    社区交流

内容摘要:这是由两部分组成的关于 XSLT 的系列文章的第 2 部分,Jack Herrington 将介绍如何扩展第 1 部分中建立的 XSLT 2.0 代码生成器,以便生成代码的 PHP 部分,为 Web 服务器提供数据库访问。

  <!-- PHP: Module tag handler -->
<xsl:template match="module" mode="php">
<xsl:result-document href="php/{@name}.php">
<script language="php">
<xsl:apply-templates select="*" mode="php" />
</script>
</xsl:result-document>
</xsl:template>

  注意,该模板使用 xsl:result-document 标签为每个模块创建新文件,然后通过 xsl:apply-templates 标签将代码填写到文件中。

  为了完成 insert 方法的实现部分,我使用了清单 10 所示的模板。

  清单 10. SQL Insert 模板

  <!-- PHP: SQL Insert tag handler -->
<xsl:template match="insert" mode="php">
<xsl:call-template name="php-db-function">
<xsl:with-param name="content">
<xsl:call-template name="php-sql-command">
<xsl:with-param name="command" select="gen:build-insert(.)" />
</xsl:call-template>
</xsl:with-param>
</xsl:call-template>
</xsl:template>

  另一个重要的调用是 build-insert 函数。清单 11 显示了该函数的代码。

  清单 11. insert 命令构造器

  <!-- Builds an SQL insert command -->
<xsl:function name="gen:build-insert">
<xsl:param name="query" />
<xsl:variable name="out">
<sql>
  <query>
INSERT INTO <xsl:value-of select="$query/@table" />
(
<xsl:for-each select="$query/field"><xsl:if test="position() > 1">,
  </xsl:if><xsl:value-of select="@name" /></xsl:for-each>
) VALUES (
<xsl:for-each select="$query/field"><xsl:if test="position() > 1">,
  </xsl:if>?</xsl:for-each>
)
  </query>
  <inputs>
    <xsl:for-each select="$query/field">
  <input name="{@name}" />
  </xsl:for-each>
  </inputs>
</sql>
</xsl:variable>
  <xsl:sequence select="$out" />
</xsl:function>

来源:ibm    作者:Jack Herrington    责编:豆豆技术应用

正在加载评论...