我在文档类型中有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>
答案 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
,取决于您希望样式表的声明性与命令性。