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

C# Discussion :

[2.0]Encoding de sortie pur la classe XslCompiledTransform


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Par défaut [2.0]Encoding de sortie pur la classe XslCompiledTransform
    Bonjour,

    En faite j'ai un souci avec la classe XslCompiledTransform car je n'arrive pas a sortir avec l'encoding que je souhaite quoique je mette il me sort toujours avec UTF-16 et moi je veux de l'UTF-8.

    Comment faire?
    Voici mon code qui marche nickel mais renvoye en UTF-16
    Code C# : 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
    private string transformto(XmlDocument Infopath, string Lang, XmlDocument SortXSLT)
            {
                XPathNavigator XInfopath = InfopathXml.CreateNavigator();
     
                //Création du lecteur XML 
                XmlNodeReader XSLTDocumentReader = new XmlNodeReader(InfopathXml);
     
                //Création du transformateur XSLT     
                XslCompiledTransform xslt = new XslCompiledTransform();
                xslt.Load(SortXSLT, XsltSettings.Default, null);
     
                //là où sera enregistré la transformation 
                StringBuilder TransformOutput = new StringBuilder();
     
                //paramètre d'écriture du fichier transformé 
                XmlWriterSettings settings = new XmlWriterSettings();
     
                //paramètre un peu spécial, consultez msdn 
                settings.ConformanceLevel = ConformanceLevel.Auto;
     
                XsltArgumentList lst = new XsltArgumentList();
                lst.AddParam("Lang", "", Lang);
                //xslt.OutputSettings correspond aux paramètres <xsl:output> dans votre fichier XSL          
                XmlWriter htmlDoc = XmlWriter.Create(TransformOutput, xslt.OutputSettings);
                xslt.Transform(XSLTDocumentReader, lst, htmlDoc, new XmlUrlResolver());
     
                return TransformOutput.ToString(); 
            }

    Ce que je comprend pas c'est d'ou viens c'est encoding car dans mon XML et mon XSLT c'est du UTF-8 et la balise xsl:output à bien son attribut encoding a UTF-8.

    A voir le problème vient de XmlWriter qui ne veux pas d'un autre encoding
    que UTF-16 (que se soit spécifier via xslt.OutputSettings ou via une classe XmlWriterSettings). J'ai déjà beaucoup chercher et vu que beaucoup de personne on le même problème que moi mais je n'aie trouvé aucune réponse.

    Merci pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Par défaut
    Fallait que je poste (ca fait deux jours que je fais des recherches) pour que je trouve la solution...

    La voici enfaite il faut utiliser la méthode transform avec un stringwriter (quelquepeux modifier voir plus bas):
    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
    private string transformto(XmlDocument InfopathXml, string Lang, XmlDocument SortXSLT)
    {
                //Création du lecteur XML 
                XmlNodeReader XSLTDocumentReader = new XmlNodeReader(InfopathXml);
     
                //Création du transformateur XSLT     
                XslCompiledTransform xslt = new XslCompiledTransform();
                xslt.Load(SortXSLT, XsltSettings.Default, null);
     
                // Création de paramètre a passer dans le XSLT
                XsltArgumentList lst = new XsltArgumentList();
                lst.AddParam("Lang", "", Lang);
     
                // Création d'une nouvelle classe héritant de StringWriter mais 
                // avec comme encoding: UTF-8. Voir classe plus bas
                Utf8StringWriter stringWriter = new Utf8StringWriter();
     
                //Transformation XSLT avec le passage de param
                xslt.Transform(XSLTDocumentReader,lst, stringWriter);
     
                //Réponse avec résultat sous forme de string
                return stringWriter.ToString(); 
    }
     //Nouvelle Classe qui hérite de StringWriter
    public class Utf8StringWriter : StringWriter
    {
        public override Encoding Encoding { get { return Encoding.UTF8; } }
    }
    Voila c'est tous le toutis Earl....

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

Discussions similaires

  1. Rediriger la sortie de la classe HTTPURLConnection
    Par adrien843 dans le forum Général Java
    Réponses: 6
    Dernier message: 04/03/2010, 15h44
  2. Réponses: 2
    Dernier message: 21/09/2007, 14h43
  3. Récupérer la sortie standard dans une autre classe
    Par EvilAngel dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 22/12/2006, 17h15
  4. Redirection sortie standard - Problème encoding
    Par schniouf dans le forum Langage
    Réponses: 4
    Dernier message: 12/12/2006, 13h51
  5. Réponses: 3
    Dernier message: 12/10/2005, 11h06

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