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 :

Remplacer les caratère spéciaux [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre habitué Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Points : 177
    Points
    177
    Par défaut Remplacer les caratère spéciaux
    Bonjour,

    J'aimerai pouvoir remplacer les caractères spéciaux pouvant être contenus dans une variable.

    Je ne vois pas trop comment faire cela.
    Si vous pourriez m'aider je vous en serai reconnaissant .

    Je vous remercie de l'attention porté à mon post.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 563
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 563
    Points : 21 627
    Points
    21 627
    Par défaut
    Mais encore ?

  3. #3
    Membre habitué Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Points : 177
    Points
    177
    Par défaut
    Remplacer les caractères spéciaux c'est à dire :

    à par a
    é --> e
    è --> e
    ...

    En faite, si une fonction fais cela ou si je suis obliger de faire une série de condition if avec des replace ou translate.

    Je ne sais pas si c'est ce que tu voulais en plus comme information, ta question restant vague.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 563
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 563
    Points : 21 627
    Points
    21 627
    Par défaut
    Citation Envoyé par Pynouz Voir le message
    En faite, si une fonction fais cela ou si je suis obliger de faire une série de condition if avec des replace ou translate.
    En XSLT 1.0, non, pas de fonction pour ça.

    En XSLT 2.0 on a accès à XPath 2.0, et s'il s'agit seulement d'enlever les accents, on peut faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    replace(normalize-unicode('été', 'NFD'), '\p{Mn}', '')
    - D'abord éclater la chaîne en décomposition unicode NFD, ce qui sépare les diacritiques (dont les accents) des lettres qu'ils complètent, et les représentent sous forme de caractère combinatoire.
    - Puis, enlever les caractères combinatoires.

    Si on veut pas risquer de trop massacrer du texte qui serait en langue bizarre, il vaut mieux recomposer derrière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    normalize-unicode(replace(normalize-unicode('été', 'NFD'), '\p{Mn}', ''), 'NFC')
    Citation Envoyé par Pynouz Voir le message
    Je ne sais pas si c'est ce que tu voulais en plus comme information, ta question restant vague.
    Humm... Outre le fait que tu avais été vague, moi je ne l'ai pas été du tout, et cela est une insulte.

  5. #5
    Membre habitué Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Points : 177
    Points
    177
    Par défaut
    Merci pour ta réponse c'est ce que je cherchais.

    Je ne t'insulte pas je ne me permettrait pas. Après, j'ai surement été vague mais il est parfois difficile d'expliquer clairement un problème car dans notre tête cela est clair donc on oubli parfois d'expliquer certaines choses.

    Et me répondre : "Mais encore?" plutôt que "je n'ai pas saisi ce que tu veux faire. Explique mieux ton problème si tu veux de l'aide" aurait été plus clair il me semble.

    Sinon merci, et encore désolé si je t'ai paru grossier ce qui n’était vraiment pas volontaire.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 563
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 563
    Points : 21 627
    Points
    21 627
    Par défaut
    Ok.

  7. #7
    Membre habitué Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Points : 177
    Points
    177
    Par défaut
    Je reviens vers vous car je n'arrive pas à utiliser la fonction normalize-unicode().

    Un message d'erreur m'informe que c'est une fonction XSLT inconnue.
    Je pense que j'ai mal passer mon XSLT en version 2.0.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="ISO-8859-1"?> 
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
     
     
    <xsl:for-each select="Portion/Lignes/Ligne/Donnees">
    <xsl:variable name="nomCliModif" select="concat(./Donnee[@Nom='NomClient'],'                                         ')"/>1
    <xsl:variable name="nomClientModif" select="normalize-unicode($nomCliModif, 'NFD')"/>
    (Je n'ai mis que le début le reste n'étant pas intéressant et un peu lourd )

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 563
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 563
    Points : 21 627
    Points
    21 627
    Par défaut
    Chez moi ce code marche correctement.

    Mais peut-être que ton moteur XSLT ne gère pas XSLT 2.0 ?

  9. #9
    Membre habitué Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Points : 177
    Points
    177
    Par défaut
    Merci pour ta réponse rapide,

    Par contre, je ne sais pas du tout comment vérifier si mon moteur le gère ou non .

    (Désolé je débute en XSLT et je ne comprend pas vraiment toute la mécanique)

    EDIT : Je test mon XSLT sur un programme windows form en C# sous visual studio 2008. Une fois qu'il marchera bien je l'implanterai ensuite dans un site web en Asp.net/C#.

  10. #10
    Membre habitué Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Points : 177
    Points
    177
    Par défaut
    J'ai télécharger le moteur Saxon B.
    J'utilise la dll saxon9api avec le using :

    Je n'arrive pas a utiliser cette librairie afin d'utiliser mon XSLT sur mon XML.

    De plus, je ne sais pas si je suis sur la bonne voie ou complétement à côté.

  11. #11
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 563
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 563
    Points : 21 627
    Points
    21 627
    Par défaut
    Désolé, no habla C#.

    Je sais qu'en Java, Saxon gère très bien le XSLT 2.0, et est même le moteur le plus agréable avec lequel j'ai pu travailler.

    (Sinon, pour tester si un moteur gère XSLT 2.0, moi je regarderais sa doc... Mais bon, tu peux essayer de placer un <xsl:for-each-group> pour voir. En tout cas, si le moteur ne gère pas XSLT 2.0, qu'il voit version="2.0", et qu'il ne se plaint pas, c'est très mal.)

  12. #12
    Membre habitué Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Points : 177
    Points
    177
    Par défaut
    D'accord,

    Je te remercie pour ton aide.

    Je pense qu'il faut donc gérer avec le moteur Saxon. Je met ce post en résolu et je vais en crée un au cas où une personne utilise saxon en C#.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 23
    Points
    23
    Par défaut
    Bonjour,

    (Attention : je ne suis pas un expert !)
    En XSLT 1.0, j'utilise régulièrement la fonction translate(). Pour votre exemple, j'écrirais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:variable name="nomClientModif" select="translate($nomCliModif, 'éèà...', 'eea...'"/>
    Bien entendu, les ... doivent être remplacés par les autres caractères à transformer. D'autre part, il est plus propre de définir des variables pour la listes des caractères à remplacer et la liste des remplaçants.

    La fonction translate() remplace le premier caractère de la première liste par le premier de la deuxième et ainsi de suite pour chaque position.

    Enfin, je n'ai pas essayé cette solution pour votre exemple, mais je l'utilise quotidiennement pour remplacer des quotes informatiques par des apostrophes typographiques.

    J'espère que cela vous aidera.

    PS : J'INSISTE : IL S'AGIT D'UNE SOLUTION EN XSLT 1.0 !!!

  14. #14
    Membre habitué Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Points : 177
    Points
    177
    Par défaut
    Merci pour ta réponse,

    Cela m’intéresse aussi. Je vais essayer cette solution.
    Je ne savais pas le faite que la fonction translate prenait en compte la position des caractère dans la chaîne pour effectuer le remplacement.

    Je vous tiens au courant dès que j'ai essayé.

  15. #15
    Membre habitué Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Points : 177
    Points
    177
    Par défaut
    Je viens d'essayer,

    J'ai mon application bureau (win form) avec laquelle cela marche parfaitement.

    Cependant mon application en asp.net qui tourne en local a du mal (les 2 ont les même fonctions pour traiter la page XML et le même XSLT).

    En faite, lorsque je passe mon document .txt en XML je retrouve le symbole � à la place de mon caractère spécial chose qui ne se produit pas avec mon application bureau.

    Ceci est-il dut au faite que c'est une application Web? Sais tu comment contourner le problème?

    (Je ne sais pas si j'ai été très clair, n'hésite pas à me demander si tu n'as pas compris quelque chose)

  16. #16
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 23
    Points
    23
    Par défaut
    En regardant l'en-tête de votre fichier XML/XSL, je remarque l'attribut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    encoding="ISO-8859-1"
    Votre fichier texte est peut-être encodé en un autre encodage que 'ISO-8859-1' utilisé par Win (vérifier, je ne pratique pas Win), par exemple en 'UTF-8' ?

  17. #17
    Membre habitué Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Points : 177
    Points
    177
    Par défaut
    Je ne sais pas quel est l'encodage des fichiers .txt.
    Cependant je ne pense pas que le problème vienne de là puisque avec le programme bureau il n'y a aucun problème.

  18. #18
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 23
    Points
    23
    Par défaut
    Dans ce cas, on atteint mes limites actuelles sur ce problème. Désolé de ne pouvoir vous aider davantage.

  19. #19
    Membre habitué Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Points : 177
    Points
    177
    Par défaut
    J'ai tout de même chercher au niveau de ce que tu m'avais dis.

    Il s'avère que tu as raison. Mon fichier texte était en ANSI lorsque je le passe en UTF 8 tout ce passe bien.

    Je te tire donc mon chapeau et te remercie beaucoup.

    Il ne me reste maintenant plus qu'a trouver du code qui trouve comment sont encodé les fichier texte afin de les convertir .

    Je vous remercie pour votre aide et je passe le fil en résolu.

  20. #20
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 23
    Points
    23
    Par défaut
    Voyez la commande iconv :

    iconv -f latin1 -t utf8 fichier.txt > fichier-utf8.txt

    Cette commande permet des conversions dans un grand nombre d'encodages.
    Je ne sais pas si Win dispose de cette commande.

    Plus d'explications ici :
    http://www.gnu.org/s/libiconv/docume...v/iconv.1.html

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Remplacer les carractères spéciaux dans un texte
    Par Caxton dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 23/11/2009, 18h12
  2. remplacer les caractéres spéciaux
    Par vanesa dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 13/04/2009, 15h46
  3. remplacer les caractères spéciaux
    Par Invité dans le forum Servlets/JSP
    Réponses: 25
    Dernier message: 05/12/2008, 13h56
  4. Réponses: 3
    Dernier message: 18/02/2008, 14h05
  5. remplacer les caracteres spéciaux
    Par roninou dans le forum Langage
    Réponses: 2
    Dernier message: 02/11/2005, 15h26

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