В блоке 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>
Update: Я реализовал обе вариации текущих ответов, но на не повезло. Кажется, что он не работает должным образом для вторых элементов вперед, потому что он будет сначала перенести первый, но не более (хотя иногда он будет делать третий). Обновлен 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>
@ Крис: напишите какой-нибудь документ на основе XML, пожалуйста. – 2010-06-16 14:13:38
@Alejandro - Добавлено – Chris
Если вы предоставляете мой блок кода пример xml, который вы предоставили, то это желаемое поведение, выводящее на первом и третьем. посмотрите на изменение метки времени. также, что такое значение $ ctimestamp? – Meiscooldude