>我的 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>
理解正确:
<xsl:for-each select="$extraimages/productimages/productimage[position() > 1 and position() <= 5 and extension != '.pdf']">
<li>
Something to do
</li>
</xsl:for-each>
所以你需要检查是否有不止一张图片。 当有零或一个时什么都不显示,当有多个时,然后显示(最多)前四个? 那怎么样
<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>
如果$extraimages
中有多个productimages
元素,则括号会有所不同 - 使用括号,您将获得不超过四个图像,如果没有它们,您将获得所有productimage
元素,这些元素位于其各自productimages
父元素的前四个productimage
子元素中,总共可能超过四个。
您还有一个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>
同样,括号可能是必需的,也可能不是必需的,具体取决于$extraimages
的结构。
如果你想显示图像 2-5 而不是 1-4,那么你不需要if
,它只是变成了
<xsl:for-each select="
($extraimages/productimages/productimage[extension != '.pdf'])
[position() > 1][position() <= 5]">
<li>something</li>
</xsl:for-each>
因为如果非 PDF 图像少于两个,select
将根本不选择任何内容。