2012-10-09 43 views

回答

2
<xsl:if test="contains(/html/body/@class, 'video')"> 
</xsl:if> 

當然,這也將評估爲my-video和其他類爲true。如果這種碰撞是可能的,可以考慮使用

<xsl:if test="/html/body/@class = 'video' or 
       contains(/html/body/@class, ' video ' or 
       starts-with(/html/body/@class, 'video ' or 
       ends-with(/html/body/@class, ' video')"> 
</xsl:if> 

如果使用XSLT 2.0,您還可以使用matches()功能

+0

你的美麗:)非常感謝你的朋友的款待 –

+1

簡單一點,你也可以做''。 –

+0

@HewWolff:絕對 –

4

在XSLT人能夠避免幾乎完全明確的條件指令:

<xsl:template match= 
    "/html/body[contains(concat(' ', @class, ' '),' video ')]"> 
<!-- Wanted processing here --> 
</xsl:template> 

當然,爲了被選擇執行,該模板需要匹配來自對應的<xsl:apply-templates>的select屬性中指定的節點集的節點 - 顯式地或作爲XSLT默認處理的一部分(作爲內置XSLT模板的一部分)。

+1

這很漂亮。我沒有想過將額外的空格添加到'@ class'中...... –

+1

@LukasEder,是的,這是一個非常強大的* generic *原則 - 它被稱爲* sentinel編程*。我在Jon Bentley的書「Programming Pearls」中看到它首先被提及。 –

相關問題