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] gestion des string vide?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2004
    Messages
    363
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 363
    Par défaut [XML] gestion des string vide?
    bonjour,

    donc voilà, j'ai un bout de code de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    writer.WriteStartElement("Description");
    writer.WriteString(this.description);
    writer.WriteEndElement();
    Le problème est que quand ma chaine this.description est vide, il me met :

    Alors que j'attend :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Description></Description>
    Quelqu'un a déjà eu ce problème?

  2. #2
    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 : 43
    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
    Ce qu'il affiche est parfaitement correct du point de vue de la syntaxe XML. Un élément qui ne contient rien peut être représenté par une seule balise avec le "/" à la fin, il n'y a pas besoin d'avoir une balise ouvrante et une fermante.
    Après, il y a peut-être une option pour contrôler ça plus finement et forcer l'affichage des 2 balises, il faudrait chercher dans la doc du XmlWriter...

    EDIT: sinon tu peux toujours vérifier si la chaine est vide, et si c'est le cas, tu écris les tags manuellement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if (this.description != null && this.description.Length > 0)
    {
        writer.WriteStartElement("Description");
        writer.WriteString(this.description);
        writer.WriteEndElement();
    }
    else
    {
        writer.WriteRaw("<Description></Description>");
    }
    Mais bon, je vois pas trop l'intérêt, vu que "<Description />" est parfaitement correct...

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Il me semble qu'il faut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    writer.WriteFullEndElement();
    pour obtenir ce comportement.

  4. #4
    Membre éclairé
    Inscrit en
    Février 2004
    Messages
    363
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 363
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Ce qu'il affiche est parfaitement correct du point de vue de la syntaxe XML. Un élément qui ne contient rien peut être représenté par une seule balise avec le "/" à la fin, il n'y a pas besoin d'avoir une balise ouvrante et une fermante.
    Après, il y a peut-être une option pour contrôler ça plus finement et forcer l'affichage des 2 balises, il faudrait chercher dans la doc du XmlWriter...

    EDIT: sinon tu peux toujours vérifier si la chaine est vide, et si c'est le cas, tu écris les tags manuellement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if (this.description != null && this.description.Length > 0)
    {
        writer.WriteStartElement("Description");
        writer.WriteString(this.description);
        writer.WriteEndElement();
    }
    else
    {
        writer.WriteRaw("<Description></Description>");
    }
    Mais bon, je vois pas trop l'intérêt, vu que "<Description />" est parfaitement correct...


    Le problème est quand je lis mon champ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (reader.NodeType == XmlNodeType.Element && reader.LocalName == "DEntry.Description" && suite)
                        reader.Read();
                    else suite = false;
                    if (reader.NodeType == XmlNodeType.Text && suite)
                    { description = reader.Value; reader.Read(); }
                    else suite = false;
                    if (reader.NodeType != XmlNodeType.EndElement && suite)
                        suite = false;
    J'utilise un code de ce type pour controler le contenu de mon champ, au cas où j'aurais un fichier xml erroné comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <Description>
       <Detail>
       ....
       </Detail>
    </Description>
    Je fais peut etre une erreur dans ma façon de controler l'integrité de mon fichier XML.....
    En tout cas, avec ce code, quand j'ai une balise <Description />, il considère que ma balise n'est pas conforme à ce qui est attendu.

  5. #5
    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 : 43
    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
    ben je sais pas trop, je fais jamais de parsing XML manuel, j'utilise plutôt la sérialisation XML...

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Pour contrôler l'intégrité d'un fichier xml ne faut il pas utiliser un XSD ou un DTD ?

    Je ne suis pas sur car je ne suis pas à jour sur les évolutions du xml.
    Je me souviens juste qu'une DTD permet de vérifier l'intégrité d'un fichier XML lorsqu'on le parse.
    Normalement si tu précise dans ton XML que tu utilises telle dtd ou telle xsd, localisé à telle endroit, le parseur fournis avec le framework (XMLDocument ou XPATHDocument) vérifie que le Xml est conforme.

  7. #7
    Membre éclairé
    Inscrit en
    Février 2004
    Messages
    363
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 363
    Par défaut
    pour l'integrité, je vais voir les dtd, sinon j'ai réussi à relire quand j'ai du : <Description />

    au lieu de lire un debut, un string et une fin, il lit seulement le debut et la fin.

Discussions similaires

  1. gestion des champs vides
    Par nizzart dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/04/2008, 14h49
  2. Gestion des PDF vide
    Par lucyole dans le forum iReport
    Réponses: 1
    Dernier message: 26/03/2008, 10h50
  3. gestion des champs vides
    Par momo-e dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 11/09/2007, 16h25
  4. Gestion des lignes vides avant/après une liste
    Par Invité dans le forum Mise en forme
    Réponses: 4
    Dernier message: 28/08/2007, 16h25
  5. Quel parseur XML pour des Strings ?
    Par krokmitaine dans le forum XML
    Réponses: 13
    Dernier message: 19/12/2006, 21h01

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