application methode Muench sur attributs d'un noeud
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 !! :aie:
Voici un extrait allégé de mon fichier :
Code:
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> |
... que je voulais transformer en :
Code:
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:
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 !