Dans le bloc if
ci-dessous, je souhaite également tester si @Timestamp
est plus petit que l'horodatage précédent Message
. Comment puis-je atteindre cet objectif?XSL - Obtenir l'attribut de l'élément précédent
<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>
Exemple 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>
Mise à jour: J'ai mis en œuvre les variations des réponses actuelles, mais à pas de chance. Il ne semble toujours pas fonctionner correctement pour les deuxièmes éléments, en ce sens qu'il mettra en gras le premier correctement mais pas plus (bien que parfois il fera le troisième). Mise à jour du code de bloc if
ci-dessous.
<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: envoyez un document d'entrée XML, s'il vous plaît. –
@Alejandro - Ajouté – Chris
Si vous fournissez mon bloc de code l'exemple xml que vous avez fourni, alors c'est le comportement souhaité, la sortie sur le premier et le troisième. Regardez le changement d'horodatage. aussi, quelle est la valeur de $ ctimestamp? – Meiscooldude