我有一个XSL宏看起来像这样: 应该从2个不同的地方调用相同的宏,只有在每个选择中,应该调用“quickLinksUrls1”或“quickLinksUrls2”。 我正在考虑将其作为变量发送,但不知道如何在for each中使用此参数。
如何在不制作具有几乎相同的foreach循环的两个不同宏的情况下实现此目的?
<xsl:param name="currentPage"/>
<xsl:param name="quickLinksGroup" select="/macro/quickLinksGroup"/>
<xsl:template match="/">
<xsl:for-each select="$currentPage/ancestor-or-self::*/Home/quickLinksUrls1/multi-url-picker/*">
<xsl:variable name="nodeId" select="node-id"/>
<xsl:variable name="linkTitle" select="link-title"/>
<xsl:if test="number($nodeId) > 0">
</xsl:if>
</xsl:for-each>
</xsl:template>
答案 0 :(得分:0)
您应该已经显示了一些输入文件,更容易误解。 无论如何,我会猜测你想要做什么。
只需使用模板匹配模式而不是<xsl:for-each>
。
<xsl:template match="/">
<xsl:apply-templates select="$currentPage/ancestor-or-self::*/Home/*[name()= 'quickLinksUrl1' or name()='quickLinksUrl2']/multi-url-picker/*"/>
</xsl:template>
<xsl:template match="*">
<!-- The content of your initial "for-each" statement -->
...
</xsl:template>
如果您需要在quickLinksUrl1&amp; 2之间区分模板主体,则可以使用<xsl:if>
隐藏template
甚至match
属性。
通常,人们应该更喜欢使用模板模式,并将for-each
的用法限制为简单的情况。这是一个很好的诀窍,请记住,imho。