Titel is misschien niet helemaal duidelijk, maar kon niets beters bedenken..
Stel ik heb de volgende .xml:
Hierbij is voor elk item de lijst van onderdelen gelijk, elk item bestaat uit dezelfde onderdelen. Deze .xml is gesorteerd op item_naam.
Wat ik nu wil is een lijst als volgt:
Dus per onderdeel de items die dat onderdeel bevatten (=allemaal) en dan per batch_nummer gesorteerd.
Hoe pak ik dit aan zonder gebruik te maken van een XQuery, zuiver alleen van een .xsl welke als stylesheet gekoppeld wordt?
Ik krijg wel een lijst van onderdelen eruit, op een al vrij smerige manier (denk ik):
Dit levert als output op:
Wat nu nog ontbreekt is een methode om per onderdeel alle items te selecteren en dan te sorteren op batch_nummer van het betreffende onderdeel.
Ik weet dat xsl:for-each hier een niet al te populaire methode is, maar ben door andere oorzaken gedwongen deze te gebruiken.
Hoe pak ik dit aan? Hoe kan ik aan de hand van de onderdeel_naam die ik nu al heb verder de selectie maken? als ik bv op het punt waar 'onthoudt dit punt even' dit ga neerzetten:
oid, dan werkt dat natuurlijk niet..
Je hoeft overigens niet echt te zoeken naar typo's oid in de .xml of .xsl hier, dit zijn zelfverzonnen voorbeelden om het principe van mijn vraag duidelijk te maken..
dus: heeft iemand een idee hoe ik hier verder ga?
Stel ik heb de volgende .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
44
45
46
| <root> <items> <item> <item_naam>item 1</item_naam> <onderdelen> <onderdeel> <onderdeel_naam>onderdeel 1</onderdeel_naam> <onderdeel_batch_nummer>1</onderdeel_batch_nummer> </onderdeel> <onderdeel> <onderdeel_naam>onderdeel 2</onderdeel_naam> <onderdeel_batch_nummer>1</onderdeel_batch_nummer> </onderdeel> </onderdelen> </item> <item> <item_naam>item 2</item_naam> <onderdelen> <onderdeel> <onderdeel_naam>onderdeel 1</onderdeel_naam> <onderdeel_batch_nummer>4</onderdeel_batch_nummer> </onderdeel> <onderdeel> <onderdeel_naam>onderdeel 2</onderdeel_naam> <onderdeel_batch_nummer>4</onderdeel_batch_nummer> </onderdeel> </onderdelen> </item> <item> <item_naam>item 3</item_naam> <onderdelen> <onderdeel> <onderdeel_naam>onderdeel 1</onderdeel_naam> <onderdeel_batch_nummer>2</onderdeel_batch_nummer> </onderdeel> <onderdeel> <onderdeel_naam>onderdeel 2</onderdeel_naam> <onderdeel_batch_nummer>3</onderdeel_batch_nummer> </onderdeel> </onderdelen> </item> [..] enzovoort [..] </items> </root> |
Hierbij is voor elk item de lijst van onderdelen gelijk, elk item bestaat uit dezelfde onderdelen. Deze .xml is gesorteerd op item_naam.
Wat ik nu wil is een lijst als volgt:
code:
1
2
3
4
5
6
7
8
9
| onderdeel 1 item 1 | batch nummer 1 item 3 | batch nummer 2 item 2 | batch nummer 4 onderdeel 2 item 1 | batch nummer 1 item 3 | batch nummer 3 item 2 | batch nummer 4 |
Dus per onderdeel de items die dat onderdeel bevatten (=allemaal) en dan per batch_nummer gesorteerd.
Hoe pak ik dit aan zonder gebruik te maken van een XQuery, zuiver alleen van een .xsl welke als stylesheet gekoppeld wordt?
Ik krijg wel een lijst van onderdelen eruit, op een al vrij smerige manier (denk ik):
code:
1
2
3
4
5
6
7
8
9
10
11
12
| <xsl:stylesheet>
<xsl:template match="/">
<xsl:for-each select="items/item">
<xsl:if test="position()=1">
<xsl:for-each select="onderdelen/onderdeel">
<xsl:value-of select="onderdeel_naam"/>
[onthoudt dit punt in de code even :)]
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet> |
Dit levert als output op:
Text output:
1
2
| onderdeel 1 onderdeel 2 |
Wat nu nog ontbreekt is een methode om per onderdeel alle items te selecteren en dan te sorteren op batch_nummer van het betreffende onderdeel.
Ik weet dat xsl:for-each hier een niet al te populaire methode is, maar ben door andere oorzaken gedwongen deze te gebruiken.
Hoe pak ik dit aan? Hoe kan ik aan de hand van de onderdeel_naam die ik nu al heb verder de selectie maken? als ik bv op het punt waar 'onthoudt dit punt even' dit ga neerzetten:
code:
1
| <xsl:for-each select="../../../items | //onderdeel_naam=onderdeel_naam"> |
oid, dan werkt dat natuurlijk niet..
Je hoeft overigens niet echt te zoeken naar typo's oid in de .xml of .xsl hier, dit zijn zelfverzonnen voorbeelden om het principe van mijn vraag duidelijk te maken..
dus: heeft iemand een idee hoe ik hier verder ga?