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 :

[XML Serial.] Eviter les "short end tags"


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 24
    Par défaut [XML Serial.] Eviter les "short end tags"
    Salut à tous,

    Alors voilà je rencontre un petit problème dans une sérialisation XML. J'utilise XmlWriter et XmlSerializer.

    J'ai un objet, qui peut contenir des propriétés de type chaines de caractères, vides.

    Lors de la sérialisation, je récupère:
    <MaPropriete />

    Or le système avec lequel je communique en XML, ne comprend pas cette syntaxe, il veut :
    <MaPropriete></MaPropriete>

    Apparement ça s'appelle "full/short end tag", mais je n'ai rien trouvé sur la manière comment forcer cela.

    Avez vous des pistes ?

    Merci par avance

    Flo.

  2. #2
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Salut,
    J'ai vu passer une solution que je n'ai pas testée. Elle consisterai à dériver XmlTextWriter de la manière suivante :
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class MyXmlTextWriter : XmlTextWriter
    {
        public MyXmlTextWriterEE( TextWriter tw) : base(tw)
        {}
     
        public override void WriteEndElement()
        {
            base.WriteFullEndElement();
        }
    }
    De cette manière, en utilisant un MyXmlTextWriter au lieu d'un XmlTextWriter classique, l'écriture du end tag est forcément faite avec le full end tag.

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 24
    Par défaut
    Salut et merci

    J'ai effectivement vu cette solution également, mais le problème c'est que je ne vois pas comment l'intégrer à mon projet, étant donné que j'utilise XmlSerializer pour sérialiser, c'est pas moi qui le fait à la main.
    Une idée ?

    Merci

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Tu peux implémenter IXmlSerializable, afin d'indiquer comment doit être sérialisé/désérialisé l'objet (cf. cet article).

    Tu peux aussi modifier le flux XML après génération. L'idée c'est de remplacer les <balise /> par <balise></balise> dans le texte.

    Par exemple avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string input = "<balise />";
    string output = Regex.Replace(input, @"<(\w+) />", "<$1></$1>");
    output sera égal à <balise></balise>.

  5. #5
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Ou utiliser la solution donnée :
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MaClasse obj = new MaClasse(); // L'objet à sérialiser
    XmlSerializer ser = new XmlSerializer(typeof(MaClasse));
    MyXmlTextWriter xtw = new MyXmlTextWriter("c:\monfichier.xml");
    ser.Serialize(xtw, obj);

    Tu peux également dériver XmlSerializer et sa méthode CreateWriter afin qu'elle retourne un MyXmlTextWriter.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par FloBaoti Voir le message
    Or le système avec lequel je communique en XML, ne comprend pas cette syntaxe, il veut :
    <MaPropriete></MaPropriete>
    Ben je sais pas qui développe ce système, mais il faudrait leur dire que leur implémentation est un peu (complètement) foireuse

    Citation Envoyé par StormimOn Voir le message
    Tu peux implémenter IXmlSerializable, afin d'indiquer comment doit être sérialisé/désérialisé l'objet (cf. cet article).
    Merci pour la pub
    Mais à mon avis dans son cas ce serait un peu comme utiliser un bulldozer pour écraser une mouche

    Je pense que la solution de ctxnop est la plus simple

    Citation Envoyé par FloBaoti Voir le message
    je ne vois pas comment l'intégrer à mon projet, étant donné que j'utilise XmlSerializer pour sérialiser, c'est pas moi qui le fait à la main.
    Non, mais le XmlSerializer peut écrire, entre autres, dans un XmlWriter... il suffit que tu fournisses au XmlSerializer une instance de MyXmlTextWriter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    XmlSerializer xs = ...
     
    using (StreamWriter wr = new StreamWriter("fichier.xml"))
    {
        using (MyXmlTextWriter xmlWriter = new MyXmlTextWriter(wr))
        {
            xs.Serialize(xmlWriter, unObject);
        }
    }

  7. #7
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par ctxnop Voir le message
    Ou utiliser la solution donnée :
    ...
    Effectivement. J'apprendrais à lire pour la prochaine fois

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/04/2009, 09h35
  2. XML.Serialize : pb avec les booléan
    Par MayOL69bg dans le forum Windows Forms
    Réponses: 6
    Dernier message: 14/11/2007, 11h26
  3. [XML Serializer] Comment enlever les propriétés vides ?
    Par BillGates12345 dans le forum EDI/Outils
    Réponses: 5
    Dernier message: 02/08/2006, 11h49

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