while循环使用查询中的不同参数

时间:2014-11-21 09:49:52

标签: xslt

我可以使用以下代码在xsl中执行while循环:

<!-- recursive named template -->
<template name="while">
    <variable name="VALUE">
        <!-- your evaluation -->
    </variable>
    <!-- evaluate and recurse -->
    <if test="$VALUE=0">
        <call-template name="while"/>
    </if>
</template>

现在我希望每当我调用“while”模板时,我的查询参数都会改变。

我第一次拨打//dbquery[@id='pers']/rows/row时,我有一个参数pOrg ='HR'。结果我得到了一些数据。我想在调用模板时使用该数据,但随后参数pOrg等于我在上一个查询中得到的数据。

实施例

<?xml version="1.0" encoding="UTF-8" ?>
<dbqueries>
  <dbquery id="pers">
    <descriptor>
      <database>xxx</database>
      <originalquery>SELECT distinct ORG_NUM,POST_NUM FROM tablename where org_num='pOrg'</originalquery>
      <parameters>
        <param name="pOrg" value="HR" />
      </parameters>
      <querystring>SELECT distinct ORG_NUM,POST_NUM FROM tablename where org_num='HR';</querystring>
    </descriptor>
    <columns>
      <column name="ORG_NUM" type="VARCHAR" />
      <column name="POST_NUM" type="VARCHAR" />
    </columns>
    <rows>
      <row ORG_NUM="HR" POST_NUM="MR" />
    </rows>
  </dbquery>
</dbqueries>

在此示例中,我希望第二次调用while模板时pOrg参数等于“MR”。

1 个答案:

答案 0 :(得分:0)

虽然不确定想要的输出,但只是一个例子作为建议,以防我理解要求权:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output omit-xml-declaration="yes" indent="yes"/>
  <xsl:template match="dbqueries">
    <xsl:apply-templates select=".//row" mode="while">
      <xsl:with-param name="rowParam" select="'HR'"/>
    </xsl:apply-templates>
  </xsl:template>
  <xsl:template match="row" mode="while">
    <xsl:param name="rowParam"/>
    <xsl:param name="post_num" select="false()"/>
    <xsl:variable name="VALUE">0</xsl:variable>
    <xsl:copy>
      <xsl:attribute name="param" select="$rowParam"/>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
    <xsl:if test="$VALUE = 0 and not($post_num)">
      <xsl:apply-templates select="." mode="while">
        <xsl:with-param name="rowParam" select="@POST_NUM"/>
        <xsl:with-param name="post_num" select="true()"/>
      </xsl:apply-templates>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

输出:

<row param="HR">HRMR</row>
<row param="MR">HRMR</row>

第一次将模板应用于row时,使用参数HR,我猜你已经在当前的XSLT中检索了这个模板,所以我在示例中只是将它用作静态参数。匹配row的模板有两个参数:rowParampost_num。第一次调用模板时post_numfalse(),当第二次调用模板时,true()设置为POST_NUM,当前行的值为{{1}}。