1
仍然很難掌握一些較難的模板,任何幫助都會很棒。<XSL:for-each>跳過具有特定值的節點
現在我正在使用一個簡單的for-each循環來排序和顯示錶中的數據。我想做同樣的事情,但跳過下面的「State」=「Talking Out」的所有節點是我當前的樣式表,並且下面是我的XML。我想我可以在當前循環中添加一個for-each,忽略符合我的標準的節點。我逃避單引號,因爲它是一個更大的PHP腳本的一部分。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<table cellpadding="3" cellspacing="0" width="390">
<tr>
<th style="text-align:left;"><span style="font:20px arial; font-weight:bold;">Agent Name</span></th>
<th style="text-align:center;"><span style="font:20px arial; font-weight:bold;">State</span></th>
<th style="text-align:center;"><span style="font:20px arial; font-weight:bold;">Time</span></th>
</tr>
<xsl:for-each select="NewDataSet/AgentSales">
<tr>
<xsl:if test="(position() mod 2 = 1)">
<xsl:attribute name="bgcolor">#cccccc</xsl:attribute>
</xsl:if>
<xsl:if test="AgentSales[State=\'Talking Out\']">
</xsl:if>
<td style="text-align:left;"><span style="font:14px arial; font-weight:bold;"><xsl:value-of select="AgentName"/></span></td>
<td style="text-align:center;"><span style="font:14px arial; font-weight:bold;"><xsl:value-of select="State"/></span></td>
<td style="text-align:center;"><span style="font:14px arial; font-weight:bold;"><xsl:value-of select="time"/></span></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
這裏是我的XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<NewDataSet>
<AgentSales>
<AgentName>MCCALLISTER AARON</AgentName>
<State>Talking Out</State>
<Reason />
<time>9</time>
</AgentSales>
<AgentSales>
<AgentName>APPELHANS BARRY</AgentName>
<State>Talking Out</State>
<Reason />
<time>1</time>
</AgentSales>
<AgentSales>
<AgentName>ARREDONDO KARLA</AgentName>
<State>Talking Out</State>
<Reason />
<time>0</time>
</AgentSales>
<AgentSales>
<AgentName>WOOTERS CHAD</AgentName>
<State>Talking In</State>
<Reason />
<time>5</time>
</AgentSales>
<AgentSales>
<AgentName>LANDINI EUGENE</AgentName>
<State>Not Ready</State>
<Reason>TRAINING</Reason>
<time>16</time>
</AgentSales>
<AgentSales>
<AgentName>BROWN EYES JONETTE</AgentName>
<State>Not Ready</State>
<Reason>TRAINING</Reason>
<time>13</time>
</AgentSales>
</NewDataSet>
好問題,+1。查看我的答案,對代碼進行非常小的修改,以實現所需的新行爲。 :) – 2010-12-20 19:08:21
這是不同的形式[旋轉
@Alejandro我已經有了For Loop的工作,然後我意識到我不想說話了。我仍然在XSL周圍徘徊。所以如果我問兩次問題,你將不得不原諒我。 – Denoteone 2010-12-21 04:18:14
回答
雖然 「應用模板」 可能比 「的for-each」,也許這個例子可以告訴你它的力量似乎不舒服......
來源
2010-12-20 18:51:41 dacracot
所以「 」說所有其他模板在這裏,只有當他們沒有說出來?我很難讓自己的頭腦看起來像事物的樣式。我一直在問這個問題,但是如果你有任何幫助學習XSLT的在線資源,我會很感激你是否願意分享。謝謝! –
Denoteone
2010-12-20 19:05:02
@Denoteone:對於XSLT學習資源,請參閱我對此問題的回答:http://stackoverflow.com/questions/339930/any-good-xslt-tutorial-book-blog-site-online/341589#341589 – 2010-12-20 19:17:36
@Denotenone:一個好的策略是讓自己做一個好的調試器,並且用來自Dimitre建議的一些來源的例子進行實驗。我喜歡來自http://oxygenxml.com的Oxygen。 – dacracot 2010-12-20 19:30:21
只需更換:
與
來源
2010-12-20 19:07:12
我可以問,爲什麼你不喜歡在字符串值比較中使用!=運算符?只是一個風格或更多的問題? – Flack 2010-12-20 20:30:51
@Flack:因爲不應該使用'!='操作符 - 這太冒險了。爲了避免在通用(節點集)比較中使用它的風險,請不要使用它。 – 2010-12-20 20:34:19
@Flack:'State!='Talking Out''表示「有一個狀態子元素的值不等於'Talking Out'」,而'not(State ='Talking Out')'表示「沒有狀態子元素的值等於'說出'「。區別是混亂。 – LarsH 2010-12-20 21:26:20
相關問題