IT技术江湖   操作系统   安全技术   平面设计   Web开发   数据库   互联网   搜索引擎   网络广告   
引擎技术江湖  BLOG  合作联系
本站
Google
IT技术江湖
首页>Web开发>xml XSLT> 用XSLT 2.0生成PHP
  • IT技术江湖
  • 用XSLT 2.0生成PHP
    http://www.hack1st.com 来源: 2008-03-27 阅读: 评论

      在两部分组成的关于 XSLT 的系列文章的第一期中,介绍了 XSLT 2.0 的一些新特性,并说明了如何从抽象数据模型生成代码。为了示范这一过程,我建立了项目,开发一个健壮的代码生成器,为数据库服务器生成 SQL,并为 Web 服务器生成用于访问数据库的 PHP。我使用多层转换通过 XSL 构建 SQL。首先将抽象模型转化成数据库物理模式模型,然后使用该模式模型构建 SQL 代码。

      接下来就要构建代码模型并从这个模型生成 PHP。在结束项目时,您将拥有系统的抽象模型、构建数据库的 SQL 代码和用于每个表的 PHP 包装器。但是在深入讨论 PHP 生成之前,我想首先回顾一下影响 XSL 模板设计及使用的 XSL 和 XSLT 2.0 的新特性。

      对 XSL 模板的增强

      要生成成功的代码则需要对目标语言(这里是 PHP)和代码生成语言(该例中即 XSLT)有充分的了解。第 1 部分的重点放在代码生成的基本原理上。本文对代码生成等式中的 XSL 一端进行了更深入的分析。

      从本质上说,XSLT 是一种模板化的语言。它接受 XML 作为输入,然后使用一组模板将 XML 转化成 XML、HTML 或文本。生成器是相关模板的集合,使用两种模式 —— XML 模式和 Text 模式 —— 将原来输入的 XML 转化成代码。位于抽象模型和代码模板之间的中间模型使用 XML 模式,生成 PHP 和 SQL 的代码模板则使用文本模式。

      这个代码生成系统使用 Saxon XSLT 引擎和一组自定义模板。为了方便起见,这些模板和输入放在同一个目录中。模板输出分别放到 PHP 和 SQL 代码目录中。不需要对 Saxon 作专门的扩展,虽然如果发现基本安装所提供的 XSL 标签或 XPath 函数不敷使用,那么可以用 Java? 扩展模板引擎。

      XSL 模板的入口是与输入 XML 的根节点匹配的 XSL 模板。在 XSL 引擎启动时,它将输入 XML 应用于模板库。如果有与根节点(/)匹配的特殊模板,则首先执行它。下面是生成器中的主模板标签:

    <xsl:template match="/">

      这个匹配系统很重要,因为 XSL 要查看应用于当前正在处理节点的可用模板的列表,然后应用最匹配的模板。看一下清单 1 中的代码,这是上一期文章中的一个例子。

      清单 1. 带有模式类型的模板

    <xsl:template match="create" mode="sql">
    DROP TABLE IF EXISTS <xsl:value-of select="@name" />;
    CREATE <xsl:value-of select="@name" /> (
    <xsl:apply-templates mode="sql" select="field" />
    PRIMARY KEY ( <xsl:value-of select="@primary-key" /> )
        );
    </xsl:template>

      代码告诉 XSL 这个模板应用于 create 标签。因此,当 XSL 遇到 create 标签时,它就会执行该模板。此外,还要注意该模板指定了模式。需要像清单 2 那样在 xsl:apply-templates 标签中指定模式。

      清单 2. 应用模板的标签

    <xsl:apply-templates mode="sql" select="$sql-model/sql" />

      XSL 中的模式

      模式是 XSL 的一个重要概念。因为内存中可能同时有多个 XML 分层结构,需要有一种方法对特定分层结构应用一组特殊的模板,或者可用于单个 XML 源的一组转换。于是就引入了模式。这个代码生成器中有一组模板以 PHP 作为模式,另一组则用 SQL 作为模式。通过使用模式将这两种语言的模板逻辑区分开来。

      xsl:apply-templates 标签告诉 XSL 将可以用的模板应用于 XML 模型中 select 标签所指定的那一部分。此外,还规定了模式 sql,因此 XSL 只寻找那些采用 sql 模式的模板。这是一种方便的模板名称空间机制。

      但是这些模板的输出怎么办呢?这就要用到新的 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 树,以后可将其他模板应用于该树。

    上一页12 下一页

    上一篇:XSLT介绍  
    下一篇:利用XSLT 2.0成批处理XML

    ·网友互动--用户名: (新注册) 密码: 匿名评论 [所有评论]
    评论内容:(用户发表意见仅代表其个人意见,评论内容与本站立场无关,请自觉遵守互联网相关政策法规)
    关注此文读者还看过
    • ·让你的XSLT如虎添翼 -- 浅谈XSLT扩展
      ·利用XSLT 2.0成批处理XML
      ·用XSLT 2.0生成PHP
      ·XSLT介绍
      ·通过XSLT访问Java代码
      ·Saxon: 剖析XSLT处理器
      ·使用Java和XSLT生成动态Web页面
      ·XSLT处理程序是如何工作的
      ·用XSLT进行WSDL处理
      ·XSLT查找表中的默认值和错误处理
    最新更新
    • ·让你的XSLT如虎添翼 -- 浅谈XSLT扩展
      ·利用XSLT 2.0成批处理XML
      ·用XSLT 2.0生成PHP
      ·XSLT介绍
      ·通过XSLT访问Java代码
      ·Saxon: 剖析XSLT处理器
      ·使用Java和XSLT生成动态Web页面
      ·XSLT处理程序是如何工作的
      ·用XSLT进行WSDL处理
      ·XSLT查找表中的默认值和错误处理
    文章关注度排行
    ·XSLT处理程序是如何工作的
    ·使用Java和XSLT生成动态Web页面
    ·在XSLT中用递归实现循环
    ·让你的XSLT如虎添翼 -- 浅谈XSLT扩展
    ·用XSLT进行WSDL处理
    ·Saxon: 剖析XSLT处理器
    ·XSLT介绍
    ·用XSLT 2.0生成PHP
    热点推荐
    使用Java和XSLT生成动态Web页面
    使用Java和XSLT生成动态
    用XSLT进行WSDL处理
    用XSLT进行WSDL处理
    Saxon: 剖析XSLT处理器
    Saxon: 剖析XSLT处理器
    XSLT查找表中的默认值和错误处理
    XSLT查找表中的默认值和
    频道推荐
    • ·XSLT处理程序是如何工作的
    • ·使用Java和XSLT生成动态Web页面
    • ·用XSLT进行WSDL处理
    • ·Saxon: 剖析XSLT处理器
    • ·XSLT介绍
    • ·XML 和XSLT结合使你的网站设计浑然一体
    • ·通过XSLT访问Java代码
    • ·XSLT查找表中的默认值和错误处理
    本站精华
    XSLT查找表中的默认值和错误处理
    XSLT查找表中
    用XSLT进行WSDL处理
    用XSLT进行WS
    使用Java和XSLT生成动态Web页面
    使用Java和XS
    • ·XSLT介绍
    • ·通过XSLT访问Java代码
    • ·Saxon: 剖析XSLT处理器
    • ·使用Java和XSLT生成动态Web页
    • ·XSLT处理程序是如何工作的
    • ·用XSLT进行WSDL处理
    • | 网站导航 | 联系QQ | 编辑邮箱 | RSS订阅 | 友情链接 | 官方blog
    • 版权所有:IT技术江湖 @2007-2008
    • powered by www.hack1st.com online services. all rights reserved.京ICP备07005766号