다음 소스 xml이 있다고 가정합니다.Xslt는 for-each 루프의 이전 요소에 액세스합니다.
<Data Key="SS_001PG"
OC:DataId="001PG"
OC:UniqueIdentifier="01-003"
OC:Status="available"
OC:DateOfBirth="2010-06-29"
OC:Sex="m">
<Event EventOID="123"
OC:EventLocation="we"
OC:StartDate="2010-07-12"
OC:Status="started"
OC:Age="0"
EventRepeatKey="1"></Event>
<Event EventOID="123"
OC:StartDate="2010-07-14"
OC:Status="started"
OC:Age="0"
EventRepeatKey="2"></Event>
</Data>
<Data Key="SS_1"
OC:DataId="1"
OC:UniqueIdentifier="1"
OC:Status="available"
OC:DateOfBirth="2010-07-14"
OC:Sex="m">
<Event EventOID="123"
OC:StartDate="2010-07-16"
OC:EndDate="2010-07-14"
OC:Status="started"
OC:Age="-1"
EventRepeatKey="1"></Event>
</Data>
처리하기 위해 다음 xslt 코드가 있습니다. 이제
<xsl:variable name="repeatedEvents" select="//Event[@EventOID='123']"/>
<xsl:for-each select="$repeatedEvents">
<xsl:sort select="@EventRepeatKey" data-type="number"/>
<xsl:variable name="prevIndex" select="position()-1"/>
<xsl:variable name="prevEvent"
select="$repeatedEvents[position()=$prevIndex]"/>
<xsl:choose>
<xsl:when test="position()=1">
<xsl:value-of select="@EventRepeatKey"/>
</xsl:when>
<xsl:otherwise>
<xsl:if test="$prevEvent/@EventRepeatKey != @EventRepeatKey">
<xsl:value-of select="@EventRepeatKey"/>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
, 당신은, 우리가 같은 EventOID을 가진 모든 이벤트를 선택하는 참조하고 EventRepeatkey를 사용하여 요소를 정렬 할 수있다. 따라서 정렬 후 두 번째 데이터 아래의 이벤트는 첫 번째 데이터의 이벤트 사이에 들어옵니다. 루프 내에서 두 번째 요소가 처리되는 동안 이전 색인을 사용하여 첫 번째 요소에 액세스 할 수 있지만 세 번째 요소가 처리 될 때 이전 색인을 사용하여 두 번째 요소에 액세스 할 수 없습니다. 두 번째 요소가 세 번째 요소보다 트리의 하위 위치에 있기 때문입니까? 우리가 문제를 어떻게 풀 수 있을지 제안 해 주시겠습니까?
누군가 도움을 줄 수 있습니까?
무엇이 문제입니까? 가능한 가장 간단한 예를 제공해주십시오. –
좋은 질문입니다, +1. 실제로 해결하려는 문제에 대한 매우 짧고 효율적이며 완벽한 솔루션에 대한 내 대답을보십시오. :) –