2010-06-16 4 views
1

아래의 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 &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> 
+0

@Chris : 일부 XML 입력 문서를 게시하십시오. –

+0

@Alejandro - 추가됨 – Chris

+0

제공 한 예제 XML 코드 블록을 제공하는 경우 첫 번째 및 세 번째로 원하는 동작이 출력됩니다. 타임 스탬프 변경을보십시오. 또한 $ ctimestamp 값은 얼마입니까? – Meiscooldude

답변

0
@Timestamp &lt; preceding-sibling::Message[1]/@Timestamp 
+0

는 XPath를 Axeses에 대해 를 잊어 버렸 그러나 아마 그것은 @Timestamp < 이전-형제 :: 메시지 [위치() + 1] XPath는 우리를 제공하기 위해 선택하는 내용에 따라/@ 타임 스탬프 해야한다. – Meiscooldude

+0

내 업데이트를 참조하십시오, 귀하의 구현뿐만 아니라 현재 내 업데이트 된 코드에 나열된 하나를 시도했다. 나는 또한 @ Meiscooldude의 변형을 시도했다. – Chris

+0

@Chris : 내 업데이트 된 답변을 참조하십시오. –

0

나는이 솔루션을 테스트하지 않은,하지만 이것은 당신을해야한다.

<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

내 업데이트를 참조하십시오. – Chris