Bonjour à tous,
je lance mon premier post avec un problème d'adaptation de la méthode Muench sur les attributs d'un noeud.
Je suis encore novice avec le XSLT mais pensais pourtant pouvoir m'en sortir comme un grand en adaptant le concept de groupement sur les noeuds, déjà bien relayé sur différents tutos de Grandfather ... Hé bien, NON !!
Voici un extrait allégé de mon fichier :
... que je voulais transformer en :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <REFERENCE databank="databank1" id="id1">truc bidule</REFERENCE> <REFERENCE databank="databank3" id="id6">machin</REFERENCE> <REFERENCE databank="databank2" id="id4">comment</REFERENCE> ... <REFERENCE databank="databank1" id="id8">chose</REFERENCE> <REFERENCE databank="databank2" id="id2">no idea</REFERENCE>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <ref_databank1> <id>id1</id> <id>id8</id> ... </ref_databank1> <ref_databank2> <id>id2</id> <id>id4> ... </ref_databank2> ...
Je fais peut être fausse route; n'applique pas la bonne méthode ou pas correctement mais voici mon code qui en fait n'affiche que la liste des databank et non pas la liste des id correspondants.
En gros; mon code qui ne marche pas:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0"> <xsl:key name="databank" match="//REFERENCE" use="@databank"/> <xsl:key name="id" match="//REFERENCE" use="@id"/> <xsl:template match="/ENTRY"> <ENTRY> <xsl:for-each select="//REFERENCE[generate-id(.)=generate-id(key('databank',@databank)[1])]"> <xsl:sort select="@databank"/> <xsl:variable name="current_databank" select="@databank"/> <xsl:element name="ref_{$current_databank}"> <xsl:for-each select="//REFERENCE[generate-id(.)=generate-id(key('id',@id)[preceding-sibling:://REFERENCE/@databank=$current_databank][1])]"> <xsl:sort select="@id"/> <xsl:element name="id"> <xsl:value-of select="@id"/> </xsl:element> </xsl:for-each> </xsl:element> </xsl:for-each> </ENTRY> </xsl:template> </xsl:stylesheet>
Voilà, en espérant avoir été clair. Pke mes neurones ne le sont plus trop.
Par avance, merci !
Partager