我在XSLT中有一个for-each语句,用于检查是否有多个产品图像。如果不止一个,则显示图像。我需要另一个条件,这是我只需要显示4个图像。可以把它包含在我的for-each语句中。现在我的for-each语句就像。
<xsl:for-each select="$extraimages/productimages/productimage[position() > 1 and extension != '.pdf']">
<li>
Something to do
</li>
</xsl:for-each>
答案 0 :(得分:2)
如果我理解正确:
<xsl:for-each select="$extraimages/productimages/productimage[position() > 1 and position() <= 5 and extension != '.pdf']">
<li>
Something to do
</li>
</xsl:for-each>
答案 1 :(得分:1)
因此您需要检查是否有多个图像。如果有零或一个然后什么都不显示,当有多个时显示(最多)前四个?那怎么样
<xsl:if test="count($extraimages/productimages/productimage) > 1">
<xsl:for-each select="($extraimages/productimages/productimage)[position() <= 4]">
<li>something</li>
</xsl:for-each>
</xsl:if>
如果productimages
中有多个$extraimages
元素,则括号会有所不同 - 括号中您将获得不超过四个图像,如果没有它们,您将获得全部{{1}在各自productimage
父元素的前四个productimage
子元素内的元素,总共可能超过四个。
您在问题中的示例中还有一个productimages
检查,以便您可以执行类似
extension
根据<xsl:if test="count($extraimages/productimages/productimage[extension != '.pdf']) > 1">
<xsl:for-each select="($extraimages/productimages/productimage[extension != '.pdf'])[position() <= 4]">
<li>something</li>
</xsl:for-each>
</xsl:if>
的结构,括号可能也可能不是必需的。
如果您想要显示2-5而不是1-4的图像,那么您不需要$extraimages
,它就会变成
if
因为如果少于两张非pdf图片,<xsl:for-each select="
($extraimages/productimages/productimage[extension != '.pdf'])
[position() > 1][position() <= 5]">
<li>something</li>
</xsl:for-each>
将根本不会选择任何内容。