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 :

XmlReader zappe le premier element :'(


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut XmlReader zappe le premier element :'(
    Bonjour.

    pour le xml suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="utf-8" ?>
    <pluginconf version="1.0.0.0" versionmin="1.0.0.0">
      <configBase>
        <VoiceDetectionConfSrc serializeAs="MonApp.MonTp1">"Default"</VoiceDetectionConfSrc>
        <VoiceDetection serializeAs="MonApp.MonTp2">Automatique</VoiceDetection>
        <ToleranceConfSrc serializeAs="MonApp.MonTp3">"Default"</ToleranceConfSrc>
        <TolerancePhrase serializeAs="float">0.0</TolerancePhrase>
        <ToleranceSemantique serializeAs="float">0.0</ToleranceSemantique>
      </configBase>
    </pluginconf>
    pourquoi lorsque je viens fraichement de créer mon XmlReader, sa propriété Name == "" , puis lorsque je fais reader.ReadStartElement() il saute directement à "configBase" sans passer par "pluginconf" ?
    J'aimerai vérifiers les attributs de version de mon element "pluginconf" avant de passer à la suite...

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Fais voir ton code, ca sera plus simple!
    Mais dans l'idée: pluginconf est le noeud racine donc tu dois pouvoir y accéder tout de suite sans faire de ReadStartElement

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    Comme toujours merci Nathanael

    voici mon code :

    Une fois reader construit dans le using (ligne 10), son ToString() affiche "none" et tous ses champs sont vide.
    J'ai du lui créer un setting car il tombait au début sur un whitespace

    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
    internal void Load(String filepath)
            {
                using (TextReader filereader = File.OpenText(filepath))
                {
                    XmlReaderSettings readersetings = new XmlReaderSettings();
                    readersetings.IgnoreWhitespace = true;
                    readersetings.IgnoreComments = true;
                    using (XmlReader reader = XmlReader.Create(filereader,readersetings))
                    {
                          //Ici reader m'affiche "None", et tous ses champs sont des strings empty
                        if (reader.IsEmptyElement)
                            throw new InvalidOperationException("Le fichier de config du plugin est vide !");
                        reader.ReadStartElement();
     
                        //if (reader.Name != "pluginconf")
                        //    throw new InvalidOperationException("Le fichier de config du plugin n'est pas correctement formaté");
                        while (reader.NodeType == XmlNodeType.Element)
                        {
                            if (reader.Name == "configBase")
                                ReadBaseConfig(reader);
                            else if (reader.Name == "configChild")
                                LoadFromChild(reader);
                        }
                        reader.ReadEndElement();
                    }
                }
                _sync = true;
     
            }
     
            private void ReadBaseConfig(XmlReader reader)
            {
                reader.ReadStartElement();
                this._VoiceDetectionConfSrc = (MonApp.MonTp1) Enum.Parse(typeof(MonApp.MonTp1), reader.ReadElementContentAsString("VoiceDetectionConfSrc", ""));
                this._VoiceDetection = (MonApp.MonTp2) Enum.Parse(typeof(MonApp.MonTp2),reader.ReadElementContentAsString("VoiceDetection",""));
                reader.ReadEndElement();
            }

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    Je crois avoir trouvé ;

    j'ai rajouté reader.IsStartElement(); en ligne 10
    et ca me place directement sur mon element "pluginconf" (un Is qui déplace un curseur )
    Je peux du coup lire ses attributs ensuite avec
    reader.MoveToAttribute("version"); puis
    soit "remonte" sur l'ellement avec MoveToElement()
    Soit passe au sous element "configBase" avec ReadStartElement()

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

Discussions similaires

  1. [D7] [BD] Trier le premier element de la BD!
    Par melles dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2007, 10h05
  2. Réponses: 6
    Dernier message: 18/11/2006, 12h48
  3. [MySQL] Requête SQL qui zappe la premiere ligne
    Par mulbek dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/01/2006, 16h24
  4. Comment mettre le premier element DbLookUpCombo
    Par CheGueVerra dans le forum Bases de données
    Réponses: 1
    Dernier message: 02/12/2004, 20h45
  5. [langage] supprimer le premier élément d'un tableau
    Par Kinethe dans le forum Langage
    Réponses: 2
    Dernier message: 20/07/2004, 15h39

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