XSLT for-each - 图片?

时间:2014-05-21 13:31:36

标签: xslt umbraco

我在文档类型中有4个媒体选择器项(SlideImage1,SlideImage2,SlideImage3和SlideImage4)。我希望能够显示这4个中的每个图像,所以如果1存在,则只显示1,如果存在2,则显示2等。如果存在1,2,3,4则显示所有图像。

检查2,3或4是否存在的最简单方法是什么?关于将来的校对,有没有办法检查是否添加了另一个别名(第5项)并自动添加?

for-each循环是最好的解决方法吗?

我目前可以像这样显示图像,但它不能很好地工作:

<xsl:variable name = "SlideImage1" select = "$sharedNode/SlideImage1" />
<xsl:variable name = "SlideImage2" select = "$sharedNode/SlideImage2" />
<xsl:variable name = "SlideImage3" select = "$sharedNode/SlideImage3" />
<xsl:variable name = "SlideImage4" select = "$sharedNode/SlideImage4" />        

<xsl:choose>
  <xsl:when test="$SlideImage1 !='' and $SlideImage2 !='' and $SlideImage3 !='' and $SlideImage4 !=''">
    <div class="projectSlide">  
        <p><img src="{umbraco.library:GetMedia($SlideImage1, 0)/umbracoFile}" height="240" width="280" /></p>
        <p><img src="{umbraco.library:GetMedia($SlideImage2, 0)/umbracoFile}" height="240" width="280" /></p>
        <p><img src="{umbraco.library:GetMedia($SlideImage3, 0)/umbracoFile}" height="240" width="280" /></p>
        <p><img src="{umbraco.library:GetMedia($SlideImage4, 0)/umbracoFile}" height="240" width="280" /></p>
    </div>
  </xsl:when>
  <xsl:otherwise>
    <xsl:if test="$SlideImage1 !=''">
      <xsl:variable name = "SlideImagePath1" select="umbraco.library:GetMedia($SlideImage1, 0)/umbracoFile" />
      <img src="{$SlideImagePath1}" height="240" width="280"/>
    </xsl:if>
  </xsl:otherwise>
</xsl:choose>

2 个答案:

答案 0 :(得分:2)

您不需要任何循环来执行此操作。

<xsl:template match="whatever">
  <div class="projectSlide">  
    <xsl:apply-templates select="$sharedNode/*[starts-with(name(), 'SlideImage')]" />
  </div>
</xsl:template>

<xsl:template match="*[starts-with(name(), 'SlideImage')]">
  <xsl:variable name="img" select="umbraco.library:GetMedia(., 0)" />
  <p><img src="{$img/umbracoFile}" height="240" width="280" /></p>
</xsl:template>

答案 1 :(得分:1)

如果您提供示例输入和输出,则会更容易回答,但这里的模板与<SlideImageN/>等元素匹配:

<xsl:template match="//*[starts-with(name(), 'SlideImage')]">
  <whatever-you-want-to-output/>
</xsl:template>

您也可以使用for-each,取决于您希望样式表的声明性与命令性。