Bonjour,
est-il possible de ne pas tenir compte, dans le document produit, des espaces, des tabulations et des retours à la ligne du fichier source XSLT, sauf ceux contenus dans des balises "<text>" ?
Merci.
Bonjour,
est-il possible de ne pas tenir compte, dans le document produit, des espaces, des tabulations et des retours à la ligne du fichier source XSLT, sauf ceux contenus dans des balises "<text>" ?
Merci.
Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
Mon blog : pragmateek.com
je vois pas trop ce que tu veux dire ....
Moi quand je fais une transformation xslt les espaces,tab && cie de mon fichier xsl ne sont pas pris en compte ............
si je veux faire un espace je prend l unicode :  
... un flash ... et ça repart
700R ... catch me if u can
Best regards,
.
Merci de ta réponse.
Voilà un exemple minimal illustrant le problème :
Le résultat n'est 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 $ cat test.xml <a> </a> $ cat test.xslt <stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform"> <template match="/"> a b </template> </stylesheet> $ java -jar ../saxon.jar test.xml test.xslt <?xml version="1.0" encoding="utf-8"?> a b
mais
Code : Sélectionner tout - Visualiser dans une fenêtre à part ab
car les retours à la ligne et tabulations sont interprétés par saxon.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 a b
Comment éviter la recopie de ces caractères ?
Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
Mon blog : pragmateek.com
moi j utilise dom et je n ai pas ce probleme : qu il y est un espace ou 10 saut de ligne je n aurai que 1 espace..... et si je veux forcer j utilise des unicode.
n y a t il pas une option de compilation ou un truc dans le style pour forcer l espacement a un seul espace avec saxon ???
... un flash ... et ça repart
700R ... catch me if u can
Best regards,
.
Même problème avec Xalan.
Comment utilises-tu dom, via une archive jar ?
Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
Mon blog : pragmateek.com
Bonjour,
utilise <xsl:text> pour définir auprès du processeur le texte utile que tu veux retrouver en sortie, sans les espaces et retour chariot qui l'entourent :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <template match="/"> <xsl:text>a</xsl:text> <xsl:text>b</xsl:text> </template>
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
Merci de ta réponse, cela fonctionne parfaitement.
Sinon aurais-tu les références de la norme XSLT expliquant le traitement du texte en dehors des balises "<text>" ?
Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
Mon blog : pragmateek.com
C'est défini ici : http://www.w3.org/TR/xslt#strip
Mais il s'agit d'une spécification, c'est donc relativement indigeste...
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
Dans cette spécification il est écrit :
Cela signifie donc que les caractères blancs du texte en dehors de "<text>" ne doivent pas être conservés ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part For stylesheets, the set of whitespace-preserving element names consists of just xsl:text.
Dans ce cas ni Saxon ni Xalan ne respecteraient la spécification.
Quelle serait donc l'interprétation de cette phrase ?
Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
Mon blog : pragmateek.com
Attention, ce ne sont pas les caractères "blancs" qui sont supprimés, ce sont les noeuds de type texte (text nodes) qui ne contiennent que des caractères "blancs", nuance !
Quand tu écris ce template :
L'élément template n'a qu'un seul noeud enfant, un text node composé de tous les caractères situés entre la balise ouvrante et la balise fermante, espaces et retour chariot compris. A cause de la présence de "a" et de "b", ce text node n'est pas considéré comme ne contenant que des blancs, et se retrouve intégralement en sortie.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <template match="/"> a b </template>
Avec ce template :
L'élément template a 5 noeuds enfants :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <template match="/"> <xsl:text>a</xsl:text> <xsl:text>b</xsl:text> </template>
- un text node contenant le retour chariot et les espaces compris entre la balise ouvrante du template et la balise ouvrante du premier xsl:text
- un premier élément xsl:text
- un text node contenant le retour chariot et les espaces compris entre la balise fermante du premier xsl:text et la balise ouvrante du second
- un deuxième élément xsl:text
- un text node contenant le retour chariot et les espaces compris entre la balise fermante du second xsl:text et la balise fermante du template
Conformément à la règle de suppression des espaces, les 3 text nodes, ne contenant que des caractères "blancs", sont supprimés et ne figurent pas dans l'arbre de sortie.
En l'occurrence, tu aurais pu arriver au même résultat avec :
Le véritable intérêt de xsl:text pour la gestion des espaces apparaît quand on génère un document de type texte, par exemple du CSV.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <xsl:template match="/">ab</xsl:template>
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
Merci de ton explication détaillée.
Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
Mon blog : pragmateek.com
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager