我有一个带有整数的数字参数 numberOfFileds 。 我需要使用以下结构创建 numberOfFileds +1 XML节点:
<CONT_CUST_FLD_00X>
<xsl:value-of
select="./platformCore:customField[@internalId='custrecord_ebiz_container_custfield_00X']/platformCore:value"/>
</CONT_CUST_FLD_00X>
其中 X - 数字从 0 到 numberOfFileds
因此,例如,当 numberOfFileds = 3时,可预测的输出必须如下:
<CONT_CUST_FLD_000>
<xsl:value-of
select="./platformCore:customField[@internalId='custrecord_ebiz_container_custfield_000']/platformCore:value"/>
</CONT_CUST_FLD_000>
<CONT_CUST_FLD_001>
<xsl:value-of
select="./platformCore:customField[@internalId='custrecord_ebiz_container_custfield_001']/platformCore:value"/>
</CONT_CUST_FLD_001>
<CONT_CUST_FLD_002>
<xsl:value-of
select="./platformCore:customField[@internalId='custrecord_ebiz_container_custfield_002']/platformCore:value"/>
</CONT_CUST_FLD_002>
<CONT_CUST_FLD_003>
<xsl:value-of
select="./platformCore:customField[@internalId='custrecord_ebiz_container_custfield_003']/platformCore:value"/>
</CONT_CUST_FLD_003>
请帮助我通过编写适当的xslt模板来实现这一点。
答案 0 :(得分:2)
您可以将{em>属性值模板用于name
的{{1}}属性,以创建具有计算名称的元素。我会像这样解决问题:
xsl:element
当然,这可能是模板,而不是for-each。
答案 1 :(得分:0)
我选择了另一种解决问题的方法:
这是我的模板:
<xsl:template name="createFieldsAuto">
<xsl:param name="newTagName"/>
<xsl:param name="internaIdValue"/>
<xsl:param name="numberOfFields"/>
<xsl:param name="cycleIndex" select="0"/>
<xsl:if test="number($cycleIndex) <= number($numberOfFields)">
<xsl:variable name="a" select="concat($internaIdValue, $cycleIndex)"/>
<xsl:element name="{concat($newTagName, $cycleIndex)}">
<xsl:value-of
select="./platformCore:customField[@internalId=concat($internaIdValue, $cycleIndex)]/platformCore:value"/>
</xsl:element>
<xsl:call-template name="createFieldsAuto">
<xsl:with-param name="newTagName" select="$newTagName"/>
<xsl:with-param name="internaIdValue" select="$internaIdValue"/>
<xsl:with-param name="numberOfFields" select="$numberOfFields"/>
<xsl:with-param name="cycleIndex" select="$cycleIndex + 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
以下是我称之为的方式:
<!--the template below helps us to generate sections like these:-->
<!--<BILL_INFO_CUST_FLD_000 ></BILL_INFO_CUST_FLD_000 >-->
<!--<BILL_INFO_CUST_FLD_001 ></BILL_INFO_CUST_FLD_001 >-->
<!--<BILL_INFO_CUST_FLD_002 ></BILL_INFO_CUST_FLD_002 >-->
<!--example of using is the following:-->
<xsl:variable name="custFields_SH_CUST">
<xsl:call-template name="createFieldsAuto">
<xsl:with-param name="newTagName" select="'CONT_CUST_FLD_00'"/>
<xsl:with-param name="internaIdValue" select="'custrecord_ebiz_container_custfield_00'"/>
<xsl:with-param name="numberOfFields" select="9"/>
</xsl:call-template>
</xsl:variable>
<xsl:copy-of select="$custFields_SH_CUST"/>