2011-03-02 167 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元素取代。