2009-09-22 84 views
0

我有一個XML文檔中的下列集合:XSLT如何添加邏輯

<events> 
    <event> 
     <type>Downloaded</type> 
     <result>Sucess</result> 
    </event> 
    <event> 
     <type>Processed</type> 
     <result>Sucess</result> 
    </event> 
</events> 

現在在我的XSLT我有一個TD表 - 我想這個TD的值來表示的狀態事件。如果事件存在處理,結果是真的,那麼我要處理的這個TD的價值,同樣,如果處理不存在,那麼如果下載存在和地位是成功的,那麼我想TD的值設定下載

...

不要指望完整的代碼,只是對如何一些編程邏輯添加到XSLT的樣本。

我真正需要檢查...是

元素是否存在的事件類型爲「已處理」 ......如果不是......然後......我會離開圖休息.....

+0

你有什麼這麼遠嗎? – 2009-09-22 18:38:12

+1

2009-09-22 18:38:37

+0

需要檢查是否...事件類型....已處理爲空...則。 ...檢查類型已下載的事件....如果那是null,那麼我猜輸出沒有開始...... – 2009-09-22 18:39:24

回答

1

您可以添加的if/else,如果邏輯與<xsl:if>

XSLT也有有一些像<xsl:choose> switch語句,其中包括不要做「其他」行爲能力的能力。

這些構建參加考試的屬性,在您指定的條件。 Here's關於有用的入門測試的一個很好的寫法。

這真是你有習慣玩的東西,但這些網站的鏈接會給你一個很好的開始。

示例:假設您的文檔模板,如:

<xsl:template match="/"> 
    <xsl:for-each select="events/event"> 
     <xsl:choose> 
      <xsl:when test="type/text() = 'Processed'"> 
       <xsl:value-of select="result"></xsl:value-of> 
      </xsl:when>  
     </xsl:choose> 
    </xsl:for-each> 
</xsl:template> 

會產生文本 'Sucess'。

+0

但是,要獲得XSLT 1.0中的/ * else *邏輯,您通常會使用'xsl:when'和' xsl:otherwise'('xsl:if'沒有else分支)。 – 2009-09-22 18:40:32

+0

請提供一個簡單的例子,用於檢查與特定值的元素是否存在等? – 2009-09-22 18:41:45

+0

請注意,在那裏使用text()函數 - 如果您不這樣做,您檢查的文本是所討論元素的所有子元素的連接值。混淆了人們的地獄。 – Brabster 2009-09-22 18:52:22

1

未經檢驗的,我有點被你試圖實現邏輯混亂,但可以嘗試用這樣的:

<xsl:template match="/"> 
    <table> 
    <xsl:apply-templates select="events/event" /> 
    </table> 
</xsl:template> 

<xsl:template match="event"> 
    <xsl:if test="type = 'Processed'"> 
    <tr> 
     <td> 
     <xsl:value-of select="result" /> 
     </td> 
    </tr> 
    </xsl:if> 
</xsl:template> 
+0

像@JBKing所說,如果您需要「其他」條件,則需要使用 Keith 2009-09-22 18:45:24

1

xsl:choose是另一種選擇。從該鏈接:

<xsl:template match="/"> 
    <html> 
    <body> 
    <h2>My CD Collection</h2> 
    <table border="1"> 
     <tr bgcolor="#9acd32"> 
     <th>Title</th> 
     <th>Artist</th> 
     </tr> 
     <xsl:for-each select="catalog/cd"> 
     <tr> 
     <td><xsl:value-of select="title"/></td> 
     <xsl:choose> 
      <xsl:when test="price &gt; 10"> 
      <td bgcolor="#ff00ff"> 
      <xsl:value-of select="artist"/></td> 
      </xsl:when> 
      <xsl:otherwise> 
      <td><xsl:value-of select="artist"/></td> 
      </xsl:otherwise> 
     </xsl:choose> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </body> 
    </html> 
</xsl:template> 

xsl:if doen't有別的功能。