XSL - получить атрибут предыдущего элемента - PullRequest
1 голос
/ 16 июня 2010

В блоке if ниже я хочу также проверить, меньше ли @Timestamp, чем предыдущая метка времени Message. Как мне этого добиться?

<xsl:for-each select="Message">
    <xsl:sort select="position()" data-type="number" order="descending"/>
    <xsl:variable name="newclass">
        <xsl:if test="@Timestamp + 60 &gt; $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 &gt; $ctimestamp">
    <xsl:if test="position() = 1">
        new
    </xsl:if>
    <xsl:if test="position() != 1 and ../Message[position()-1]/@Timestamp - 1 &lt; @Timestamp">
        new
    </xsl:if>
</xsl:if>

Ответы [ 2 ]

0 голосов
/ 16 июня 2010

Я не тестировал это решение, но это следует сделать вам.

<xsl:for-each select="Message">
    <xsl:sort select="position()" data-type="number" order="descending"/>

    <xsl:variable name="newclass">
      <xsl:if test="position() != 1">
         <xsl:if test="..\Message[position()-1]@Timestamp &lt; @Timestamp">new</xsl:if>
      </xsl:if>
      <xsl:if test="position() = 1">
         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>
0 голосов
/ 16 июня 2010
@Timestamp &lt; preceding-sibling::Message[1]/@Timestamp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...