Bonjour,
J'aurais une petite question pour les connaisseurs. Est-il possible avec mon xslt de regarder dans mes balises xml si il y a des retours chariots et si oui les remplacer par un autre caractère par exemple "¤¤" ?
Je vous remercie d'avance![]()
Bonjour,
J'aurais une petite question pour les connaisseurs. Est-il possible avec mon xslt de regarder dans mes balises xml si il y a des retours chariots et si oui les remplacer par un autre caractère par exemple "¤¤" ?
Je vous remercie d'avance![]()
Possible oui.
Mais en XLST 1.0 sans EXSLT, facile non.
Le problème, c'est pour modifier le texte. La seule manière de faire est d'appeler un template récursif sur le texte à modifier, qui va chercher s'il y a un retour chariot dedans.
Si non, le texte est renvoyé tel quel.
Si oui, utilisation de substring-before() et substring-after() pour séparer avant le premier retour chariot et après. Le texte renvoyé est ce qu'il y a avant, suivi des caractères de remplacement, suivi de l'appel récursif sur ce qu'il y a après.
j'ai effectué cette manip mais apparemment ça ne marche pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <xsl:variable name="response" select="."/> <xsl:value-of select="translate($responses,' ','non')"/>
j'ai réussi à remplacer le retour chariot par un autre caractère qui est ¤ voici le code.
si vous avez d'autre proposition de code pour faire cela je suis preneur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <xsl:value-of select="translate(.,' ','¤¤')"/>![]()
La fonction translate travaille caractère par caractère. C'est quelque chose dont on (moi en tout cas) n'a pas vraiment l'habitude en programmation :
signifie :
1
2 translate(..., ' ', 'non')
- remplace le caractère '\r' par 'n'.
- remplace le caractère '\n' par 'o'.
le dernier 'n' est ignoré car il ne correspond à aucun caractère en entrée.
Malheureusement en XPath 1.0 c'est la seule fonction de remplacement qui existe. Pour remplacer un string (resp. un ou plusieurs caractère(s)) par un autre (resp. plusieurs ou un caractère(s)), il te faut passer par un template récursif. Ce n'est pas bien compliqué mais c'est relativement lourd.
Je viens de remarquer vous utilisez une construction comme ceci:
Je dirais non. C'est de chercher de problème pour soi-même et il devient implémentation dépendante: certain xslt engin le prend très mal. Il vaut mieux toujours s'écrire soit comme ceci<!-- &_# lire comme &# -->
<xsl:with-param name="search">
<xsl:text>&_#13;&_#10;</xsl:text>
</xsl:with-param>
soir comme cela
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <!-- &_# lire comme &# --> <xsl:with-param name="search" select="'&_#13;&_#10;'" />
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <!-- &_# lire comme &# --> <xsl:with-param name="search"> <xsl:value-of select="'&_#13;&_#10;'" /> </xsl:with-param>
[HS]
@tsuji: tu peux écrire &#[B][/B]10; pour que ça s'affiche bien (cf ce post)
[/HS]
Sinon je ne savais pas que le <text>...</text> pouvait être mal interprété, ceci dit je l'utilise extrèmement rarement. ^_^
Je vous remercie pour vos réponses
mais malheureusement lors de la saisie de vos code
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <xsl:with-param name="search"> <xsl:value-of select="' '"/> </xsl:with-param>
je recois un message d'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <xsl:with-param name="search"> <xsl:value-of select="'&_#13;&_#10;'" /> </xsl:with-param>
Erreur d'analyse XML : mal formé
Emplacement : file:///E:/mairie%20de%20paris/xsl/test/form/Lutece-sourcing.xsl
Numéro de ligne 96, Colonne 37 : <xsl:value-of select="' '![]()
J'espère que vous aviez enlever le "underscore" (_) au moins dans le second cas dans le code réel?
Mais pour le premier, c'est tout de même m'étonner. C'est de jamais vu. Avez-vous essayé l'autre version?
Il se peut que le message provenait de par d'autre raison syntactique ailleurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <xsl:with-param name="search" select="' '" />
Il doit y avoir un problème dans la chaîne d'outils. 'Faudrait qu'on sache avec quoi tu travailles.
Qu'est-ce qui fournit le fichier XML d'entrée, qu'est-ce qui consomme le fichier texte de sortie, quel est le moteur XSLT utilisé et comment est-il invoqué. Ce genre de choses.
Ok, c'est un début...
Et le reste de mes questions ? Pour autant que je sache, tout ce petit monde ne produit jamais de fichiers textes à l'aide de XSLT, n'est-ce pas ?
@Loceka: salut Tlouye, merci pour le truc et l'effort d'alerter le management.
En ce qui concerne la syntaxe utilisant xsl:text, je peux proposer un petit document xslt autonome pour faire tester.
Il ne donne pas les même résultats pas MSXML2 ou msxsl.exe. Le second cas, result-text, rien n'est remplacé... Pour xerces, saxon, par exemple, ça va. En tout cas, ce sont des petites détailles qui lient probablement avec seulement des caractères invisibles comme cr, lf...
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 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" encoding="utf-8" /> <xsl:param name="s" select="'cr: etc cr: etc'" /> <xsl:template match="/"> <root> <result-select> <xsl:call-template name="string-replace"> <xsl:with-param name="str" select="$s" /> <xsl:with-param name="search" select="' '" /> <xsl:with-param name="replace" select="'¤'" /> </xsl:call-template> </result-select> <result-text> <xsl:call-template name="string-replace"> <xsl:with-param name="str" select="$s" /> <xsl:with-param name="search"> <xsl:text> </xsl:text> </xsl:with-param> <xsl:with-param name="replace" select="'¤'" /> </xsl:call-template> </result-text> </root> </xsl:template> <!-- ajouter to template nommé aussi... --> </xsl:stylesheet>
Partager