Bonjour à tous,
Encore une fois je compte sur votre aide pour m'aider à répondre à un petit problème d'ordre technique...
Au cour de mon travail je suis amené à devoir modifier un petit fichier XML exploitant du XSL, langage que je ne connaissait même pas il y à 2 jours...
J'ai cherché à me débrouiller tous seul mais je sèche complètement et je passe énormément de temps sur un petit algo qui n'aurait pas du me prendre plus de 10min (si seulement c'était en java, python etc..)
Alors voilà, la tache est relativement simple pour quelqu'un étant à l'aise avec le xsl:
j'aimerais:
->si une adresse fais plus de 40 caractères:
---->la spliter sur deux lignes
Bien sur, en faisant attention à ne pas couper un mot en deux, il faudrait aller à la ligne avec le mot complet, exemple :
mot1 mot2 mot3 ... mot999
mot5 mot6...
et non pas :
mot1 mot2 mot3 ... mo
t4 mot5 mot6...
j'ai déjà essayé plusieurs concepts mais rien n'a jamais fonctionné
voici quelques exemples de mes essais :
ou bien encore :
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 <xsl:template match="Address"> <xsl:call-template name="split"> <xsl:with-param name="add" select="."> <Conv_Address1> <xsl:value-of select="$a" /> </Conv_Address1> <Conv_Address2> <xsl:value-of select="$b" /> </Conv_Address2> </xsl:with-param> </xsl:call-template> </xsl:template> <xsl:template name="split"> <xsl:param name="Address"/> <xsl:variable name="a" /> <xsl:variable name="b" /> <xsl:variable name="flag" select="true()"/> <xsl:choose> <xsl:when test="contains($Adress,' ')"> <xsl:if test="string-length(concat($a, substring-before($add,' '))) > 40"> <xsl:value-of select="$flag = false()" /> </xsl:if> <xsl:choose> <xsl:when test="$flag = true()"> <xsl:value-of select="concat('$a =', substring-before($add,' '))" /> </xsl:when> <xsl:when test="$flag = false()"> <xsl:value-of select="concat('$b =', substring-before($add,' '))" /> </xsl:when> </xsl:choose> <xsl:call-template name="split"> <xsl:with-param name="Address"> <xsl:if test="string-length(concat($a, substring-after($add,' '))) > 40"> <xsl:value-of select="$flag = false()" /> </xsl:if> <xsl:choose> <xsl:when test="$flag = true()"> <xsl:value-of select="concat('$a =', substring-after($add,' '))" /> </xsl:when> <xsl:when test="$flag = false()"> <xsl:value-of select="concat('$b =', substring-after($add,' '))" /> </xsl:when> </xsl:choose> </xsl:with-param> </xsl:call-template> </xsl:when> </xsl:choose> </xsl:template>
Mais je crois bien que ma logique de programmation acquise au cour de dev en POO avec du java, python c# etc... ne coïncide pas du tout avec les principes du XSL que j'essaie le plus possible de comprendre...
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 <xsl:template name="split"> <xsl:param name="Address"/> <xsl:variable name="flag" select="true()"/> <xsl:choose> <xsl:when test="contains($Adress,' ')"> <xsl:if test="string-length(concat($Conv_Address1, substring-before($add,' '))) > 40"> <xsl:value-of select="$flag = false()" /> </xsl:if> <xsl:choose> <xsl:when test="$flag = true()"> <Conv_Address1> <xsl:value-of select="substring-before($add,' ')" /> </Conv_Address1> </xsl:when> <xsl:when test="$flag = false()"> <Conv_Address2> <xsl:value-of select="substring-before($add,' ')" /> </Conv_Address2> </xsl:when> </xsl:choose> <xsl:call-template name="split"> <xsl:with-param name="Address"> <xsl:if test="string-length(concat($Conv_Address1, substring-after($add,' '))) > 40"> <xsl:value-of select="$flag = false()" /> </xsl:if> <xsl:choose> <xsl:when test="$flag = true()"> <Conv_Address1> <xsl:value-of select="substring-after($add,' ')" /> </Conv_Address1> </xsl:when> <xsl:when test="$flag = false()"> <Conv_Address2> <xsl:value-of select="substring-after($add,' ')" /> </Conv_Address2> </xsl:when> </xsl:choose> </xsl:with-param> </xsl:call-template> </xsl:when> </xsl:choose> </xsl:template>
j'ai essayé de m'appuyer sur ceci : http://www.developpez.net/forums/d25...ath/split-xsl/
Partager