我可以使用以下代码在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
”。
答案 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
的模板有两个参数:rowParam
和post_num
。第一次调用模板时post_num
为false()
,当第二次调用模板时,true()
设置为POST_NUM
,当前行的值为{{1}}。