Ik krijg de volgende gegevens in XML uit de database, en wil deze mbv XSLT omzetten naar een betere opmaak. Alleen nu krijg ik het niet voor elkaar om de dubbele waardes eruit te halen.
Hier de data die ik uit de database krijg in XML :
Zo moet het uiteindelijk worden:
Ik heb nu de volgende code in m'n XSLT file staan:
En dit is wat ik als uitvoer krijg:
Het gaat dus om het feit dat shortmessage herhaald word maar het moet dus een unieke waarde zijn. Dit zou dus mbv die key en generate-id functies te doen moeten zijn maar ik krijg het niet voor elkaar. Zoeken op GoT/Google leverde wel wat op, maar niets werkends.
Mijn vraag is dus wat ik moet wijzigen aan met XSLT code om dit werkend te krijgen?
Hier de data die ik uit de database krijg in XML :
code:
1
2
3
4
5
6
7
8
9
10
| <oda> <Row ODA_ID="0" AID="CD46" GROUP_TYPE="08" GROUP_VERSION="A" TIMEOUT="2" ODA_ID_1="0" SHORT_MESSAGE="0066" PORT_NR="1" ACCESS_RIGHT="0" ODA_ID_2="0" /> <Row ODA_ID="0" AID="CD46" GROUP_TYPE="08" GROUP_VERSION="A" TIMEOUT="2" ODA_ID_1="0" SHORT_MESSAGE="0066" PORT_NR="2" ACCESS_RIGHT="0" ODA_ID_2="0" /> <Row ODA_ID="0" AID="CD46" GROUP_TYPE="08" GROUP_VERSION="A" TIMEOUT="2" ODA_ID_1="0" SHORT_MESSAGE="6280" PORT_NR="1" ACCESS_RIGHT="0" ODA_ID_2="0" /> <Row ODA_ID="0" AID="CD46" GROUP_TYPE="08" GROUP_VERSION="A" TIMEOUT="2" ODA_ID_1="0" SHORT_MESSAGE="6280" PORT_NR="2" ACCESS_RIGHT="0" ODA_ID_2="0" /> <Row ODA_ID="1" AID="0008" GROUP_TYPE="06" GROUP_VERSION="A" TIMEOUT="1" ODA_ID_1="1" SHORT_MESSAGE="0062" PORT_NR="1" ACCESS_RIGHT="1" ODA_ID_2="1" /> <Row ODA_ID="1" AID="0008" GROUP_TYPE="06" GROUP_VERSION="A" TIMEOUT="1" ODA_ID_1="1" SHORT_MESSAGE="0062" PORT_NR="2" ACCESS_RIGHT="1" ODA_ID_2="1" /> <Row ODA_ID="1" AID="0008" GROUP_TYPE="06" GROUP_VERSION="A" TIMEOUT="1" ODA_ID_1="1" SHORT_MESSAGE="4689" PORT_NR="1" ACCESS_RIGHT="1" ODA_ID_2="1" /> <Row ODA_ID="1" AID="0008" GROUP_TYPE="06" GROUP_VERSION="A" TIMEOUT="1" ODA_ID_1="1" SHORT_MESSAGE="4689" PORT_NR="2" ACCESS_RIGHT="1" ODA_ID_2="1" /> </oda> |
Zo moet het uiteindelijk worden:
code:
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
| - <oda> - <application> <aid>CD46</aid> - <group> <type>08</type> <version>A</version> </group> <timeout>2</timeout> <shortmessage>0066</shortmessage> <shortmessage>6280</shortmessage> - <odaaccessrights> - <portaccess> <number>1</number> <enabled>0</enabled> </portaccess> </odaaccessrights> </application> - <application> <aid>0008</aid> - <group> <type>06</type> <version>A</version> </group> <timeout>1</timeout> <shortmessage>0062</shortmessage> <shortmessage>4689</shortmessage> - <odaaccessrights> - <portaccess> <number>1</number> <enabled>1</enabled> </portaccess> </odaaccessrights> </application> </oda> |
Ik heb nu de volgende code in m'n XSLT file staan:
code:
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
| Bovenaan file:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:key name="odaid" match="oda/Row" use="@ODA_ID"/>
<xsl:key name="sm" match="oda/Row" use="@AID"/>
<xsl:template match="/">
In file zelf:
<oda>
<xsl:for-each select="oda/Row[generate-id() = generate-id(key('odaid', @ODA_ID)[1])]">
<application>
<aid><xsl:value-of select="@AID"/></aid>
<group>
<type><xsl:value-of select="@GROUP_TYPE"/></type>
<version><xsl:value-of select="@GROUP_VERSION"/></version>
</group>
<timeout><xsl:value-of select="@TIMEOUT"/></timeout>
<xsl:for-each select="key('sm', @AID)">
<shortmessage><xsl:value-of select="@SHORT_MESSAGE"/></shortmessage>
</xsl:for-each>
<odaaccessrights>
<portaccess>
<number><xsl:value-of select="@PORT_NR" /></number>
<enabled><xsl:value-of select="@ACCESS_RIGHT" /></enabled>
</portaccess>
</odaaccessrights>
</application>
</xsl:for-each>
</oda> |
En dit is wat ik als uitvoer krijg:
code:
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
| <oda> - <application> <aid>CD46</aid> - <group> <type>08</type> <version>A</version> </group> <timeout>2</timeout> <shortmessage>0066</shortmessage> <shortmessage>0066</shortmessage> <shortmessage>6280</shortmessage> <shortmessage>6280</shortmessage> - <odaaccessrights> - <portaccess> <number>1</number> <enabled>0</enabled> </portaccess> </odaaccessrights> </application> - <application> <aid>0008</aid> - <group> <type>06</type> <version>A</version> </group> <timeout>1</timeout> <shortmessage>0062</shortmessage> <shortmessage>0062</shortmessage> <shortmessage>4689</shortmessage> <shortmessage>4689</shortmessage> - <odaaccessrights> - <portaccess> <number>1</number> <enabled>1</enabled> </portaccess> </odaaccessrights> </application> </oda> |
Het gaat dus om het feit dat shortmessage herhaald word maar het moet dus een unieke waarde zijn. Dit zou dus mbv die key en generate-id functies te doen moeten zijn maar ik krijg het niet voor elkaar. Zoeken op GoT/Google leverde wel wat op, maar niets werkends.
Mijn vraag is dus wat ik moet wijzigen aan met XSLT code om dit werkend te krijgen?