Toon posts:

[xsl] aanpak methode geclusterde lijst

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb een stuk xml met een aantal <rows>'s met daarin een orderId en een clusterId, versimpelt:
XML:
1
2
3
4
5
6
<row><orderId="1"><clusterId="2"></row>
<row><orderId="2"><clusterId="2"></row>
<row><orderId="3"><clusterId="1"></row>
<row><orderId="4"><clusterId="3"></row>
<row><orderId="5"><clusterId="3"></row>
<row><orderId="6"><clusterId="7"></row>
(dit staat niet noodzakelijk op volgorde van orderId)

nu moet dat omgezet worden naar <tr>'s met elke cluster in een aparte <tbody> en ik zit even blanko hoe ik dat nu handig kan aanpakken. Wat ik nu doe is itereren over de clusters en daarin de rows op volgorde erin zetten. Maar dan krijg ik de clusters niet in de juiste volgorde (1,2,3,7 ipv 2,1,3,7)

Verder is er nog een initiele situatie dat alle orderId's 0 zijn, in dat geval moet gewoon op cluster worden gesorteerd en maakt de volgorde daarbinnen niet uit.

met een for-each en een sort op de orderId en vervolgens op clusterId heb ik de lijst altijd in de juiste volgorde, maar nu moet dit zeg maar opgehakt worden in verschillende <tbody>'s en daar loop ik een beetje vast. Ik ken op zich voldoende xsl, maar ik loop dus vast op de methode. Iemand een aanpak?

[ Voor 60% gewijzigd door Verwijderd op 17-06-2006 13:31 ]


Verwijderd

Ik heb er niet zuper-goed naar gekeken, maar het probleem van het groeperen van clusterId's in een <tbody> doet mij meteen denken aan de Muenchian Grouping methode:
http://www.jenitennison.com/xslt/grouping/muenchian.html

Een probleem: ik kan het je niet uitleggen want ik heb geen idee hoe het werkt. Het maakt gebruik van <xsl:key> en dat is één van de XSLT-zaken die ik nooit heb begrepen :X Het toepassen ervan is geen sinecure maar daar kom je vast zelf wel uit.

Verwijderd

Topicstarter
super :> ik had zelf nog niet aan keys gedacht, maar zo haal je inderdaad een groep makkelijk uit een lijst

een key definieert gewoon een "ingang" naar bepaalde nodes, als ik dus bij bovenstaand voorbeeld definieer:
XML:
1
<xsl:key name="foep" match="row" use="clusterId"/>
dan kan ik met
code:
1
key('foep','2')
alle nodes selecteren met clusterId="2"

die methode van jou maakt een lijst van alle eerste nodes van elk cluster (een lijst met clusterId's dus) en for-each'ed daar doorheen

edit:
voor degenen die dit ook implementeren: vergeet niet de data-type bij de sort, dat heeft me net een uurtje hoofdbrekens bezorgd :P

[ Voor 89% gewijzigd door Verwijderd op 17-06-2006 23:14 ]