从我的根模板获取唯一帐户值,调用转到模板输入xml我将有多个节点,我的要求是一旦调用从根模板转到反模板,如果找到匹配的accountId在多个元素之间,帐户详细信息模板仅被调用一次,而不管找到的其他匹配项。我需要满足上述要求的解决方案。
输入样本:
<elements><accountId>1</accountId></elements>
<elements><accountId>1</accountId></elements>
<elements><accountId>2</accountId></elements>
<elements><accountId>2</accountId></elements>
<elements><accountId>3</accountId></elements>
以下行应包含在某些代码下,因此只调用一次
<xsl:call-template name="Account_details" />
以下是xsl
的完整代码 <xsl:template match="/">
<xsl:variable name="unique-accounts" select="//*/*/*/accountId/text()[generate-id()=generate-id(key('account-by-id', .)[1])]"/>
<xsl:for-each select="$unique-accounts">
<xsl:variable name="currentValue" select="current()"/>
<xsl:apply-templates select="//trans">
<xsl:with-param name="passCurrentValue" select="$currentValue"/>
</xsl:apply-templates>
</xsl:for-each>
</xsl:template>
<xsl:template match="trans">
<xsl:param name="passCurrentValue" />
<xsl:variable name="booleanValue" select="true()"/>
<xsl:for-each select="elements">
<xsl:if test="$passCurrentValue=/*/*/accountId">
<xsl:if test="$booleanValue">
<xsl:call-template name="Account_details" />
<xsl:variable name="booleanValue" select="false()"></xsl:variable>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template name="Account_details">
.............
</xsl:template>
答案 0 :(得分:0)
使用代码
<xsl:template match="/">
<xsl:variable name="booleanCheck" select="true"></xsl:variable>
变量booleanCheck
是文档节点true
下面的节点集(XSLT 1.0)或名为/
的元素序列。因此,除非您的XML输入具有名为true
的根元素,否则该值是空节点集,分别为空序列。如果要选择布尔值,请使用<xsl:variable name="booleanValue" select="true()"/>
。见http://www.w3.org/TR/xpath/#function-true。然后你可以测试<xsl:if test="$booleanValue">
。这应该解释如何使用布尔值,这是否适合您的上下文我不确定。