0

我的 XSLT 中有一个 for-each 语句,用于检查是否有多个产品图像。如果有多个则显示图像。这里我需要另一个条件,即我只需要显示 4 个图像。如何包含这个进入我的 for-each 语句。现在我的 for-each 语句就像。

<xsl:for-each select="$extraimages/productimages/productimage[position() &gt; 1  and extension != '.pdf']">
    <li>
        Something to do
    </li>
</xsl:for-each>
4

2 回答 2

2

如果我理解正确:

<xsl:for-each select="$extraimages/productimages/productimage[position() &gt; 1  and position() &lt;= 5 and extension != '.pdf']">
    <li>
        Something to do
    </li>
</xsl:for-each>
于 2013-10-22T09:09:20.933 回答
1

所以你需要检查是否有多个图像。当有零或一时什么都不显示,当有多个时显示(最多)前四个?那么怎么样

<xsl:if test="count($extraimages/productimages/productimage) &gt; 1">
  <xsl:for-each select="($extraimages/productimages/productimage)[position() &lt;= 4]">
    <li>something</li>
  </xsl:for-each>
</xsl:if>

如果有多个productimages元素,括号会有所不同$extraimages- 使用括号,您将获得不超过四个图像,没有它们,您将获得各自父元素productimage的前四个子元素中的所有元素,这可能总共超过四个。productimageproductimages

您还可以extension在问题中的示例中进行检查,以合并您将执行类似的操作

<xsl:if test="count($extraimages/productimages/productimage[extension != '.pdf']) &gt; 1">
  <xsl:for-each select="($extraimages/productimages/productimage[extension != '.pdf'])[position() &lt;= 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() &gt; 1][position() &lt;= 5]">
  <li>something</li>
</xsl:for-each>

因为select如果非 pdf 图像少于两个,则根本不会选择任何内容。

于 2013-10-22T09:01:42.253 回答