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][JDOM] Ajout non-intentionnel d'espace et motif de transformation


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Points : 11
    Points
    11
    Par défaut [XSLT][JDOM] Ajout non-intentionnel d'espace et motif de transformation
    Bonjour,

    Lors d'une transformation XSL concernant une URL (balise <a>) contenue dans des parenthèses, le processeur ajoute un espace entre celles-ci et la transformation du lien.

    En d'autres termes et avec un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <!-- ... -->
    Blablabla (<a href="http://foobar.com"/>)
    devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Blablabla ( foobar_transformation_result )
    alors que cela devrait être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Blablabla (foobar_transformation_result)

    La faute en incombe sûrement à ma feuille de style, dont voici les extraits intéressants :

    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
     
    <!-- ... -->
      <!-- C'est à partir de cette règle que la règle de transformation de la balise "a" est appelée -->
      <xsl:template match="contents">
        <xsl:apply-templates/>
      </xsl:template>
     
    <!-- ... -->
      <xsl:template match="a">
        <xsl:element name="a">
          <xsl:if test="@href">
            <xsl:attribute name="href"><xsl:value-of select="@href"/></xsl:attribute>
          </xsl:if>
          <xsl:if test="@target">
            <xsl:attribute name="target"><xsl:value-of select="@target"/></xsl:attribute>
          </xsl:if>
          <xsl:if test="@name">
            <xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>
          </xsl:if>
          <xsl:if test="@title">
            <xsl:attribute name="title"><xsl:value-of select="@title"/></xsl:attribute>
          </xsl:if>
          <xsl:value-of select="."/>
        </xsl:element>
      </xsl:template>
    Il m'est apparu avec évidence que c'est dû à un problème de ma feuille de style car j'ai le même résultat tant avec ma sortie XHTML que XSL-FO.

    Quelqu'un pourrait-il m'aiguiller et me dire ce que je fais mal ?

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Le premier truc qui vient à l'esprit quand on regarde ta template (à moins qu'il y ait des attributs que tu ne veuilles copier et on peut quand même faire plus simple) c'est pourquoi tu n'as pas fait un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="a">
        <xsl:copy-of select="."/>
    </xsl:template>


    Autrement essaye avec la fonction normalize-space()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     <xsl:template match="a">
        <xsl:element name="a">
    ....
          <xsl:value-of select="normalize-space(.)"/>
        </xsl:element>
      </xsl:template>

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Erwy Voir le message
    Le premier truc qui vient à l'esprit quand on regarde ta template (à moins qu'il y ait des attributs que tu ne veuilles copier et on peut quand même faire plus simple) c'est pourquoi tu n'as pas fait un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="a">
        <xsl:copy-of select="."/>
    </xsl:template>

    Parce que je suis novice en XSL et que je ne connaissais pas - encore - .
    Merci pour le truc.

    Citation Envoyé par Erwy
    Autrement essaye avec la fonction normalize-space()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     <xsl:template match="a">
        <xsl:element name="a">
    ....
          <xsl:value-of select="normalize-space(.)"/>
        </xsl:element>
      </xsl:template>
    Merci du conseil mais cela me donne le même résultat : toujours un espace entre les parenthèses et le contenu.
    Je vais encore chercher de mon côté.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    En fait j'ai de plus en plus de soupçons non pas sur la feuille ou le processeur XSLT mais sur le code qui génère le XML qui est passé en entrée du processeur.

    Désolé pour le bruit.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Pour information, peut-être que cela en intéressera au moins un, il s'agit de l'output avec Format.getPrettyFormat() de JDOM.
    Celui-ci passe à la ligne et indente à chaque balise, d'un nouveau niveau de l'arborescence, rencontrée.

    Pour un arbre XML donnant ceci en Format.getRawFormat() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <?xml version="1.0" ?>
    <root>Blablabla (<a href="http://www.a_link.tv"/>) blablabla ...</root>
    ceci après application du formattage PrettyFormat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0" ?>
    <root>
        Blablabla (
            <a href="http://www.a_link.tv"/>
        ) blablabla ...
    </root>
    Ce qui donne un espace lors de la transformation.

Discussions similaires

  1. [XSLT] Tester la non présence d'une valeur dans un fichier
    Par arnauann dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/01/2007, 15h29
  2. [XSLT][Débutant]XPATH non reconnu par PHP5
    Par fredrik dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 27/09/2006, 12h13
  3. [XSLT]Namespace vide non conforme XHTML
    Par FlyByck dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 12/09/2006, 15h11
  4. [XSLT] Comment ajouter 1 minute ou 1 jour à une date
    Par crazzino dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 09/07/2006, 12h19
  5. [XSLT] comme je force le caratère espace
    Par koudjo dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 30/06/2006, 20h24

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