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. #21
    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 trouvé mon bonheur sur un autre site,

    Une fonction permettant de trouver l'encodage du fichier :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    using System.Text;
    using System.IO;
    ....
    /// <summary>
    /// Permet de tester l'encodage utilisé pour le fichier texte dont le chemin est fourni
    /// </summary>
    /// <param name="CheminFichier">Chemin du fichier</param>
    /// <returns>Encodage du fichier Texte</returns>
    private Encoding ObtientENcoding(string CheminFichier)
    {
    Encoding enc = null;
    FileStream file = new FileStream(CheminFichier, FileMode.Open, FileAccess.Read, FileShare.Read
    if (file.CanSeek)
    {
    byte[] bom = new byte[4]; // Get the byte-order mark, if there is one
    file.Read(bom, 0, 4);
    if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf) // utf-8
    {
    enc = Encoding.UTF8;
    }
    else if ((bom[0] == 0xff && bom[1] == 0xfe) || // ucs-2le, ucs-4le, and ucs-16le
    (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff)) // ucs-4
    {
    enc = Encoding.Unicode;
    }
    else if (bom[0] == 0xfe && bom[1] == 0xff) // utf-16 and ucs-2
    {
    enc = Encoding.BigEndianUnicode;
    }
    else // ANSI, Default
    {
    enc = Encoding.Default;
    }
    // Now reposition the file cursor back to the start of the file
    file.Seek(0, SeekOrigin.Begin);
    }
    else
    {
    // The file cannot be randomly accessed, so you need to decide what to set the default to
    // based on the data provided. If you're expecting data from a lot of older applications,
    // default your encoding to Encoding.ASCII. If you're expecting data from a lot of newer
    // applications, default your encoding to Encoding.Unicode. Also, since binary files are
    // single byte-based, so you will want to use Encoding.ASCII, even though you'll probably
    // never need to use the encoding then since the Encoding classes are really meant to get
    // strings from the byte array that is the file.
    enc = Encoding.Default;
    }
    return enc;
    }
    et une autre permettant la conversion :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    using System.IO;
    //--------------------------------------------------------------------------------------------
    //Voici les différents encodages acceptés :
    //System.Text.Encoding.ASCII
    // .BigEndianUnicode
    // .[Default]
    // .Unicode
    // .UTF7
    // .UTF8
    //Ces deux méthodes permettent par défaut de convertir de UTF8 vers ANSI et de ANSI vers UTF8,
    //mais vous pouvez très bien choisir l'encodage souhaité ! (cf liste ci-dessus)
    //--------------------------------------------------------------------------------------------
    public class FileConvert
    {
    //Méthode de conversion de UTF8 vers ANSI
    void UTF8_to_ANSI(string file_source, string file_destination)
    {
    string ls_contenu;
    try {
    //Déclaration du fichier de destination avec l'encodage souhaité, ici "default" (=ANSI)
    StreamWriter fic_dest = new StreamWriter(file_destination, true, System.Text.Encoding.Default);
    //Déclaration du fichier source avec son encodage, ici UTF8
    StreamReader monStreamReader = new StreamReader(file_source, System.Text.Encoding.UTF8);
    //Lecture de tout le contenu du fichier source
    ls_contenu = monStreamReader.ReadToEnd;
    //Ecriture du contenu du fichier source dans le fichier de destination
    fic_dest.WriteLine(ls_contenu);
    //Fermeture du fichier
    fic_dest.Close();
    }
    catch (Exception err) {
    //Capture de l'erreur éventuelle
    MsgBox("Erreur : " + vbCrLf + err.ToString, MsgBoxStyle.Critical, "CvrtFileFormat.dll");
    }
    }
    //Méthode de conversion de ANSI vers UTF8
    void ANSI_to_UTF8(string file_source, string file_destination)
    {
    string ls_contenu;
    try {
    //Déclaration du fichier de destination avec l'encodage souhaité, ici "UTF8"
    StreamWriter fic_dest = new StreamWriter(file_destination, true, System.Text.Encoding.UTF8);
    //Déclaration du fichier source avec son encodage, ici "Default" (=ANSI")
    StreamReader monStreamReader = new StreamReader(file_source, System.Text.Encoding.Default);
    //Lecture de tout le contenu du fichier source
    ls_contenu = monStreamReader.ReadToEnd;
    //Ecriture du contenu du fichier source dans le fichier de destination
    fic_dest.WriteLine(ls_contenu);
    //Fermeture du fichier
    fic_dest.Close();
    }
    catch (Exception err) {
    //Capture de l'erreur éventuelle
    MsgBox("Erreur : " + vbCrLf + err.ToString, MsgBoxStyle.Critical, "CvrtFileFormat.dll");
    }
    }
    }
    Voilà je te remercie encore

  2. #22
    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 réouvre le post car je viens d'être confronté au problème du caractère '&'.

    Celui-ci est convertit dans mon fichier XML par &amp; et je voudrais le convertir grâce à mon XSLT en '&' d'origine.

    Es-ce que cela est possible avec la fonction translate?

  3. #23
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Le caractère & est réservé en XML, la seule manière de le représenter est &amp; ou bien l'utilisation de balises <![CDATA[ ... ]]>

    Par conséquent, il n'y a pas d'histoire de "'&' d'origine," ça n'existe pas en XML.
    Et la seule chose que XSLT pourrait faire d'autre qu'une représentation en &amp; c'est de forcer la balise CDATA là où il peut apparaître, à l'aide de l'attribut cdata-section-elements de la balise <output>.

    Exemple, si le & peut apparaître dans des balises <paragraphe> ou <cdr:ref>, mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:output
      method="xml"
      cdata-section-elements="paragraphe cdr:ref"
    />
    sous la balise <stylesheet>.

  4. #24
    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,

    Mais en faite, je transforme un fichier XML (déjà existant) en fichier .txt grâce au XSLT. Ce n'est donc pas un problème qu'il y est ce '&amp;' dans le fichier XML mais j'aurai aimé pouvoir le traiter pour qu'il ressorte en '&' du coter de mon document .txt.

  5. #25
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Ah, oui, tu en avais parlé en effet.

    Pour générer du texte, il faut mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:output method="text"/>
    sous le <xsl:stylesheet>

    Sinon, par défaut il génère un fragment XML (ou un document XML complet,) où le & doit donc être échappé.

  6. #26
    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 de tester ça marche parfaitement.

    Je ne pensais pas que ce serait si simple .

    Petit à petit je commence à mieux comprendre le XSLT grâce à vous.

    Encore merci.

    Je repasse en résolu.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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, 19h12
  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, 16h46
  3. remplacer les caractères spéciaux
    Par Invité dans le forum Servlets/JSP
    Réponses: 25
    Dernier message: 05/12/2008, 14h56
  4. Réponses: 3
    Dernier message: 18/02/2008, 15h05
  5. remplacer les caracteres spéciaux
    Par roninou dans le forum Langage
    Réponses: 2
    Dernier message: 02/11/2005, 16h26

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