2011-03-02 229 views
0

我已创建自定义xslt样式以在我的网站上显示新闻。我的问题是,我的一些新闻有一个横幅,其中一些没有。那么,如何通过使用XSLT来确定如何显示带有横幅的新闻或没有它的新闻?XSLT显示图片或显示空白

我知道什么字段包含横幅网址。所以我可以想象我必须遍历我的新闻,然后通过某种if语句的返回值来加载显示表单,该if语句检查新闻是否有横幅广告。

我是XSLT新手,所以我该怎么做?任何帮助appriciated。

+1

问一个XSLT问题的正确方法是提供一个完整的(但尽可能最小的)XML文档,完整的想要的结果以及列出转换的任何规则/约束。请这样做,否则收到的答案的质量将只与您问题的质量相符。 – 2011-03-02 14:11:40

+1

经典的XSLT方式是使用niether'xsl:if'或'xsl:choose'等指令进行模式匹配,与上面的回答类似。但是如果没有输入样本,我们无法向您显示如何。 – 2011-03-02 14:46:09

回答

1

我认为你可以使用这样的事情:

<xsl:choose> 
    <xsl:when test="not(empty(imageurlfield))"> 
    <!-- Display with image here --> 
    </xsl:when> 

    <xsl:otherwise> 
    <!-- Display without image here --> 
    </xsl:otherwise> 
</xsl:choose> 
+0

我收到一个错误,说'empty()'是一个未知的XSLT函数? – diceler 2011-03-02 13:36:31

+0

'empty()'是一个XPath/XSLT 2.0函数。 – 2011-03-02 14:38:42

0

您可以使用xsl:if标签来测试一些XPath的所有脑干:

<xsl:if test="./@banner"> 
    <p class="banner"><xsl:value-of select="./@banner" /></p> 
</xsl:if> 
+0

只有当它属于一个属性时它才会起作用,并且如果banner属性包含一个空字符串,它将显示p-tag。 – Chris 2011-03-02 13:26:54

+2

@Chris:否。节点集的有效布尔值除非为空,否则为真。 – 2011-03-02 14:43:59

+0

啊好吧谢谢。不知道。 – Chris 2011-03-02 15:12:18

0

只需指定两个模板,一个新闻条目一面旗帜,一面没有。

<xsl:template match="newsitem[banner]"> 
    <!-- pattern for news items with a banner --> 
</xsl:template> 

<xsl:template match="newsitem"> 
    <!-- pattern for news items without a banner --> 
</xsl:template> 

上面的例子假设新闻项都包含在名为newsitem的元素,含约旗帜的数据的子元素banner,如果存在一个。这里的第二个模板被第一个包含banner孩子的newsitem元素取代。