<xsl:if test=preceding-sibling::node()/@id = ./@id">
. = det aktuelle element = <xsl:value-of select="." />
</xsl:if>
/J
Hej Jokkejensen
Tusind tak for din kommentar!! Jeg har et lille problem med ovenstående, for jeg sorterer data i min for-each og det tager "preceding-sibling" åbenbart ikke højde for. Har du en ide til hvordan jeg løser det?
På forhånd mange tak for svar!
sorter data når du smider dem i din variable, men det burde ellers ikke have noget at sige..
Hvis du har en sort, under din foreach, vil nodesettet være sorteret efter denne, også i din foreach.
Jeg har fundet frem til at når jeg bruger "preceding-sibling" i en for-each som er sorteret, så kigger "preceding-sibling" ikke i det sorterede resultat, men i det orginale resultat. Jeg har brug for at det kigge i det sorterede.
prøv ./preceding-sibling::node()/@id
Ellers vis mig hvordan du danner denne variable.. Ofte har jeg også måtte danne noget xml for at transformere det endnu engang.
ex:
<xsl:variable name="mitdata">
<root>
<xsl:foreach select="item">
<xsl:sort XXXX />
<item>
<xsl:copy-of select="." />
</item>
</xslforeach>
</root>
</xsl:variable>
<xsl:foreach select="$mitdata//item" />
/J
/J
Hej Jokke og tak fordi at du "hænger på" :-)
Her kommer lidt kode:
<Timetable>
<Result>
.....
</TimetableEvent>
<TimetableEvent>
<Date>2010-06-15</Date>
<WeekNumber>24</WeekNumber>
<WeekdayNumber>2</WeekdayNumber>
<Weekday>Tirsdag</Weekday>
<LectureNumber>6</LectureNumber>
<StartTime>13:30</StartTime>
<EndTime>14:15</EndTime>
<Subject>
<SubjectName>63040</SubjectName>
<Level>-</Level>
<ShortDescription>Modul 4</ShortDescription>
<Description>Beskrivelse</Description>
</Subject>
<Activity>
<Name>EH75</Name>
<ShortDescription>E75</ShortDescription>
<Description>beskrivelse</Description>
<Department>EH</Department>
<NumberOfActiveStudents>39</NumberOfActiveStudents>
</Activity>
<Room>
<Number>204 Teo</Number>
<ShortDescription>kort...</ShortDescription>
<Name>et eller andet</Name>
<Role>U</Role>
<RoleType>U</RoleType>
<BuildingNumber>hus</BuildingNumber>
<BuildingDescription>stort hus</BuildingDescription>
</Room>
</TimetableEvent>
<TimetableEvent>
.....
</Result>
</Timetable>
<!--Jeg henter så det data jeg skal bruge-->
<xsl:variable name="skema" select="/Result/Timetable/TimetableEvent[generate-id(.) = generate-id(key('t', StartTime))]"></xsl:variable>
<!-- og gennemløber det -->
<xsl:for-each select="$skema[(number(substring-before(StartTime,':'))*100+number(substring-after(StartTime,':'))) > 799]">
<xsl:sort select="number(substring-before(StartTime,':'))*100+number(substring-after(StartTime,':'))" data-type="number" order="ascending"/>
<!-- aktuelle nodes sluttid -->
<xsl:value-of select="EndTime"/> -
<!-- *** forgående nodes sluttid *** -->
<xsl:value-of select="./preceding-sibling::node()[1]/StartTime"></xsl:value-of>
...
den forgående nodes slut tid viser den forgående node i mit orginale XML, og ikke den forgående node i min sorterede liste som jeg udskriver. Giver det mening?
ja det giver fin nok mening.
Mente bare ikke det fungerede sådan..
Men du kan vel "bare":
<!-- *** forgående nodes sluttid *** -->
<xsl:value-of select="$skema/node()[position() = (position()-1)]/StartTime"></xsl:value-of>
tjek lige om position = 1, ellers går det nok galt :)
Har prøvet følgende, men det rendere ikke noget:
<xsl:if test="position() != 1">
<xsl:value-of select="$skema/node()[position() = (position()-1)]/StartTime"></xsl:value-of>
</xsl:if>
Har du ikke mulighed for at sende over en privat besked, et udpluk af det xml, gerne en 10-15 <TimetableEvent>'s
Så skal jeg nok lige få det til at virke. Er det msxml ?
Har du haft tid til at kigge på det?