在if
塊以下,我想測試@Timestamp
是否小於之前的Message
的時間戳。我怎樣才能做到這一點?XSL - 獲取之前元素的屬性
<xsl:for-each select="Message">
<xsl:sort select="position()" data-type="number" order="descending"/>
<xsl:variable name="newclass">
<xsl:if test="@Timestamp + 60 > $ctimestamp">new</xsl:if>
</xsl:variable>
<tr><td class="debugtime">
<xsl:value-of select="@Time"/>
</td><td class="{$newclass}">
<xsl:value-of select="node()"/>
</td></tr>
</xsl:for-each>
示例XML
<Message Time="2010/06/17 04:23:32" Timestamp="1276773812">message1</Message>
<Message Time="2010/06/17 04:23:32" Timestamp="1276773812">message2</Message>
<Message Time="2010/06/17 04:23:33" Timestamp="1276773813">message3</Message>
<Message Time="2010/06/17 04:23:33" Timestamp="1276773813">message4</Message>
更新: 我已經實現了電流的答案,但沒有運氣這兩個變化。對於第二個元素,它總是不能正常工作,因爲它會正確地第一個但不會更多(儘管有時它會做第三個)。下面更新了if
區塊代碼。
<xsl:if test="@Timestamp + 60 > $ctimestamp">
<xsl:if test="position() = 1">
new
</xsl:if>
<xsl:if test="position() != 1 and ../Message[position()-1]/@Timestamp - 1 < @Timestamp">
new
</xsl:if>
</xsl:if>
@Chris:請發一些XML輸入文件。 – 2010-06-16 14:13:38
@Alejandro - Added – Chris 2010-06-16 15:36:45
如果您提供的代碼塊是您提供的示例xml,那麼這就是所需的行爲,即第一個和第三個輸出。看看時間戳變化。 另外,$ ctimestamp的值是多少? – Meiscooldude 2010-06-16 15:44:36