Bonjour à tous,
J'ai un petit soucis pour comprendre comment associer différents noms et prénoms que peuvent avoir une personne. Je m'explique par un exemple :
J'ai besoin de créer une balise <Nom type="Tertiaire"> qui va contenir les différentes combinaisons des noms/prénoms présentes pour la personne dans le fichier pour au final obtenir :
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 <Personne id="1"> <Details> <Nom type="Principal"> <Valeurs> <Nom>TOTO</Nom> <Prenom>TITI</Prenom> </Valeurs> </Nom> <Nom type="Secondaire"> <Valeurs> <Nom>TATA</Nom> <Prenom>TUTU</Prenom> </Valeurs> </Nom> </Details> </Personne>
Voici le xsl que j'ai pour le moment généré :
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 <Personne id="1"> <Details> <Nom type="Principal"> <Valeurs> <Nom>TOTO</Nom> <Prenom>TITI</Prenom> </Valeurs> </Nom> <Nom type="Secondaire"> <Valeurs> <Nom>TATA</Nom> <Prenom>TUTU</Prenom> </Valeurs> </Nom> <Nom type="Tertiaire"> <Valeurs> <Nom>TOTO</Nom> <Prenom>TITI</Prenom> </Valeurs> <Valeurs> <Nom>TOTO</Nom> <Prenom>TUTU</Prenom> </Valeurs> <Valeurs> <Nom>TATA</Nom> <Prenom>TITI</Prenom> </Valeurs> <Valeurs> <Nom>TATA</Nom> <Prenom>TUTU</Prenom> </Valeurs> </Nom> </Details> </Personne>
Merci d'avance pour vos réponses/pistes de développements.
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="no" encoding="ISO-8859-1"/> <!-- Recopie dans un premier temps tout le fichier xml d'origine --> <xsl:template match="node() | @*"> <xsl:copy> <xsl:apply-templates select="node() | @*"/> </xsl:copy> </xsl:template> <!-- On s'occupe maintenant du formatage de la balise "Tertiaire" --> <xsl:template match="Details"> <xsl:copy> <!-- On cree la balise <Name NameType="Tertiaire"> si cette derniere n'existe pas --> <xsl:if test="not(Nom[@type = 'Tertiaire'])"> <Nom type="Tertiaire"> <Valeurs> <xsl:call-template name="Prenom"/> <xsl:call-template name="Nom"/> </Valeurs> </Nom> </xsl:if> <!-- On ecrit le resultat final --> <xsl:for-each select="Nom"> <xsl:variable name="type" select="@type"/> <Nom type="{$type}"> <xsl:for-each select="Valeurs"> <xsl:copy> <xsl:apply-templates select="node() | @*"/> </xsl:copy> </xsl:for-each> </Nom> </xsl:for-each> </xsl:copy> </xsl:template> <xsl:template name="Prenom"> <xsl:for-each select="node() | @*"> <xsl:for-each select="Valeurs"> <xsl:if test="Prenom != ''"> <Prenom><xsl:value-of select="Prenom"/></Prenom> </xsl:if> </xsl:for-each> </xsl:for-each> </xsl:template> <xsl:template name="Nom"> <xsl:for-each select="node() | @*"> <xsl:for-each select="Valeurs"> <xsl:if test="Nom != ''"> <Nom><xsl:value-of select="Nom"/></Nom> </xsl:if> </xsl:for-each> </xsl:for-each> </xsl:template> </xsl:stylesheet>
Partager