Beste allen,
Ik ben bezig met het transformeren van een simple XML boom (zie onder). Ik moet daarvoor groeperen op elementen die diep in de boom zitten. Om te grouperen gebruik ik geen XSLT 2.0 group-by functie, maar de Muenchian Grouping methode (zie http://www.jenitennison.com/xslt/grouping/). Echter, zoals je waarschijnlijk al kon raden, ik kom er niet uit. Mijn structuur is namelijk ietwat anders, waardoor het groeperen (en uniek maken) van de elementen niet 100% correct werkt.
Concreet is het probleem dat er wel ge-grouped-by wordt op het eerste "Group" element, maar niet op de 2de. In onderstaande XML heb ik 4 groepen (A, A, B en C), waarvan 3 unieke groepen (Groep A, B en C dus). In mijn HTML zie ik echter groep C niet, waardoor ik er achter ben gekomen dat alleen gegroepeerd wordt wordt op de 1ste instantie van het Group element, terwijl er per Sample 2 Group elementen zijn.
Heeft iemand suggesties die mij verder kunnen helpen? Alvast heel erg bedankt, dit kost me nu al 3 dagen namelijk
Erik
XML
XSLT
HTML
Maar zou moeten zijn:
Ik ben bezig met het transformeren van een simple XML boom (zie onder). Ik moet daarvoor groeperen op elementen die diep in de boom zitten. Om te grouperen gebruik ik geen XSLT 2.0 group-by functie, maar de Muenchian Grouping methode (zie http://www.jenitennison.com/xslt/grouping/). Echter, zoals je waarschijnlijk al kon raden, ik kom er niet uit. Mijn structuur is namelijk ietwat anders, waardoor het groeperen (en uniek maken) van de elementen niet 100% correct werkt.
Concreet is het probleem dat er wel ge-grouped-by wordt op het eerste "Group" element, maar niet op de 2de. In onderstaande XML heb ik 4 groepen (A, A, B en C), waarvan 3 unieke groepen (Groep A, B en C dus). In mijn HTML zie ik echter groep C niet, waardoor ik er achter ben gekomen dat alleen gegroepeerd wordt wordt op de 1ste instantie van het Group element, terwijl er per Sample 2 Group elementen zijn.
Heeft iemand suggesties die mij verder kunnen helpen? Alvast heel erg bedankt, dit kost me nu al 3 dagen namelijk
Erik
XML
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="simpleXSL.xsl"?> <Result> <Act> <Sample> <Name>BL</Name> <Analysis> <Description>Description 1</Description> <AnalysisResult> <Value>1</Value> </AnalysisResult> <Group>Groep A</Group> </Analysis> <Analysis> <Description>Description 2</Description> <AnalysisResult> <Value>40</Value> </AnalysisResult> <Group>Groep A</Group> </Analysis> </Sample> </Act> <Act> <Sample> <Name>BL</Name> <Analysis> <Description>Description 3</Description> <AnalysisResult> <Value>10</Value> </AnalysisResult> <Group>Groep B</Group> </Analysis> <Analysis> <Description>Description 4</Description> <AnalysisResult> <Value>240</Value> </AnalysisResult> <Group>Groep C</Group> </Analysis> </Sample> </Act> </Result> |
XSLT
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:key name="acts-by-group" match="Act" use="Sample/Analysis/Group" /> <xsl:template match="Result"> <xsl:for-each select="Act[count(. | key('acts-by-group', Sample/Analysis/Group)[1]) = 1]"> <xsl:sort select="Sample/Analysis/Group" /> <xsl:value-of select="Sample/Analysis/Group" />,<br /> </xsl:for-each> </xsl:template> </xsl:stylesheet> |
HTML
HTML:
1
2
3
4
| <html> <body>Groep A,<br>Groep B,<br> </body> </html> |
Maar zou moeten zijn:
HTML:
1
2
3
4
| <html> <body>Groep A,<br>Groep B,<br>Groep C,<br> </body> </html> |