IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XSLT] Gestion des espaces, tabulations et retours à la ligne


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut [XSLT] Gestion des espaces, tabulations et retours à la ligne
    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

  2. #2
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    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 : &#160;
    ... un flash ... et ça repart

    700R ... catch me if u can

    Best regards,
    .

  3. #3
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Merci de ta réponse.

    Voilà un exemple minimal illustrant le problème :
    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
    Le résultat n'est pas :
    mais
    car les retours à la ligne et tabulations sont interprétés par saxon.

    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

  4. #4
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    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,
    .

  5. #5
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    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

  6. #6
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    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

  7. #7
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    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

  8. #8
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    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

  9. #9
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Dans cette spécification il est écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For stylesheets, the set of whitespace-preserving element names consists of just xsl:text.
    Cela signifie donc que les caractères blancs du texte en dehors de "<text>" ne doivent pas être conservés ?

    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

  10. #10
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par seriousme Voir le message
    Cela signifie donc que les caractères blancs du texte en dehors de "<text>" ne doivent pas être conservés ?
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <template match="/">
                    a
                    b
    </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.

    Avec ce template :
    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>
    L'élément template a 5 noeuds enfants :
    1. 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
    2. un premier élément xsl:text
    3. 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
    4. un deuxième élément xsl:text
    5. 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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="/">ab</xsl:template>
    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.
    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

  11. #11
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/04/2012, 13h53
  2. [RegEx] Supprimer les espaces, tabulations et retour à la ligne
    Par Sayrus dans le forum Langage
    Réponses: 5
    Dernier message: 07/03/2008, 12h21
  3. Gestion des espaces temporaires
    Par pholos dans le forum Administration
    Réponses: 3
    Dernier message: 07/06/2007, 09h23
  4. [XSLT] Gestion des \ et @
    Par michaelbob dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 28/09/2006, 12h38
  5. [VBS] Gestion des espaces dans le chemin de fichiers
    Par Edoxituz dans le forum VBScript
    Réponses: 4
    Dernier message: 23/02/2006, 16h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo