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 :

Transformer le contenu d'une balise pour y ajouter des retours chariots. [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2024
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2024
    Messages : 47
    Par défaut Transformer le contenu d'une balise pour y ajouter des retours chariots.
    Bonjour,
    J'ai un "souci" d'affichage d'une de mes balises dans le *bip* qu'est la génération des PDF via l'ERP.

    Pour la faire courte : j'ai un fichier XML qui est généré avec le contenu d'une commande d'achat, fichier XML qui contient entre autres une balise po_comments, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <po_comments>Format fini 21*29.7cm
    Epaisseur du produit fini : 6mm
    Finition : mat...</po_comments>
    Le contenu de la balise s'affiche comme ça dans le fichier XML et dans l'ERP.

    Mais dans le PDF, avec le XSL qui dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="po_comments"/>
    ça m'affiche un "pavé" du genre :
    Format fini 21*29.7cm Epaisseur du produit fini : 6mm Finition : mat...
    Existe-t-il une fonction (en XSLT 1.0 comme l'indique le titre, je suis bloqué là-dessus...) qui permet de "transformer" le contenu de po_comments pour que les retours chariots (qui semblent présents) soient bien interprétés?

    Merci d'avance pour les infos que vous aurez, et désolé si je n'utilise pas les bons termes...

  2. #2
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2024
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2024
    Messages : 47
    Par défaut
    Je me réponds à moi-même avec les éléments que je trouve, même si j'ai l'impression que ça ne répond pas totalement à mon souci.

    Première piste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:value-of select="translate(po_comments, '\r\n', '<br />')"/>
    De ce que j'en ai compris, r serait remplacé par b, et n par /, transformant mon texte en charabia illisible...
    Donc j'abandonne cette première piste, à moins qu'on me détrompe sur son usage?

    Deuxième idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:value-of select="concat(substring-before(po_comments, '\r\n'), ' <br /> ', substring-after(po_comments, '\r\n'))"/>
    Tel que je le comprends, ça ne fonctionnerait que pour la première occurrence du retour chariot, mais ensuite, le reste serait toujours condensé dans la même ligne?
    Je vais tester quand même pour confirmer ou infirmer la chose, je reviendrai donner une réponse un peu plus figée.

    Si en parallèle quelqu'un de mieux calé a une meilleure idée, je prends toujours

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2024
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2024
    Messages : 47
    Par défaut
    Je reviens sur l'idée du Concat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:value-of select="concat(substring-before(po_comments, '\r\n'), ' &lt;br /&gt; ', substring-after(po_comments, '\r\n'))"/>
    Premier point : j'avais oublié d'échapper < et >, ce qui m'a affiché une erreur assez rapide à comprendre quand on lit le n° de ligne incriminé.

    Ensuite, sur un exemple où j'avais du contenu dans po_comments, ça m'affiche uniquement <br />.
    J'en déduis que la chaîne que je dois rechercher n'est pas \r\n (j'ai mis ça après recherche Google car les serveurs et les postes clients sont sous Windows).
    Mes essais suivants semblent indiquer que la chaîne de caractère que je cherche n'est pas ni : j'avoue que je commence à me demander comment je vais me dépatouiller de cette demande

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2024
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2024
    Messages : 47
    Par défaut
    Je viens également de tester la méthode suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:value-of select="po_comments" output="text"/><br />
    Mais les sauts de ligne contenus dans po_comments ne s'affichent toujours pas.

    J'ai essayé également sans succès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:value-of select="po_comments" disable-output-escaping="yes" />
    J'avais trouvé ces deux pistes sur Stack Overflow en me disant que l'échappement des retours chariots pouvait être la source de mon sujet, mais non.

    Je viens de vérifier dans la base de données, en me disant que le texte contenu est tiré de cette base, et les sauts de ligne y sont bien présents quand je choisis d'envoyer les résultats dans du texte ou dans un fichier.
    Je suppose que cela peut aider, puisque je cherche "juste" à afficher TOUT le contenu de la valeur de mon attribut, mais je bloque sur le comment.

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2024
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2024
    Messages : 47
    Par défaut
    Problème réglé !

    Version longue de l'explication :
    - Le texte est enregistré dans la base de données, où il contient les sauts de ligne.
    - Ensuite, le moteur XSLT de l'ERP génère le XML qui servira à la création du PDF, et au niveau du XML les sauts de ligne sont toujours présents = ce qui veut dire que le contenu est conservé entre la base de données et le XML par le processus.
    - Ce chemin de raisonnement m'a fait comprendre que les sauts de ligne ne pouvaient pas "disparaître" entre le XML et le PDF, et que mon problème n'était pas un gros problème de code ou de transformation de la valeur, puisque la valeur n'était pas altérée par le traitement.

    Arrivé à ce niveau, j'ignore totalement la mécanique qui explique la simplicité de la solution (que j'ai trouvée sur Wrox, que je ne connaissais pas).
    Toujours est-il que la solution consiste "simplement" à intégrer mon affichage dans une balise <pre>, qui conserve le formatage du texte source (issu de la base de données donc) avant son affichage (ici dans un PDF), comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <pre><xsl:value-of select="po_comments"/><br /></pre>
    J'ai simplifié mon exemple de code en retirant les attributs de style (class, align...) qui n'apportent rien de constructif au sujet.
    Mais si d'autres se posent la question, on peut mettre ces attributs dans le <pre>

    J'ai un peu l'impression d'avoir monologué, d'avoir posé une question bête, mais si j'ai eu le tour d'autres l'auront peut-être et la trace sur le forum pourrait les aider.

    Bref, bonne fin de journée à tout le monde, et bon code

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 24/02/2010, 16h07
  2. Réponses: 3
    Dernier message: 03/01/2008, 21h41
  3. Réponses: 2
    Dernier message: 28/11/2007, 09h26
  4. modiffier le contenu d'une balise
    Par duplo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/06/2006, 18h20
  5. [xsl] mauvaise interprétation du contenu d'une balise XML
    Par Cédric B. dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 27/01/2006, 13h59

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