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 :

repositionnement d'un XmlReader


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut repositionnement d'un XmlReader
    Bonjour

    Je pense que le repositionnement dans un XmlReader n'est pas possible, je cherche donc la meilleure maniere d'executer l'operation suivante :

    Dans un fichier de setting je peux trouver l'element "PrintSettings"

    Mon reader etant ouvert je cherche cet element afin de le deserialiser dans sa classe spécifique

    Je fais donc un reader.ReadToFollowing("PrintSettings");

    S'il a trouvé, j'appelle un XmlDeserializer qui va faire le boulot
    Au retour mon reader et positionné a la suite de "PrintSetting" et je continue a lire les autres éléments.

    MAIS Si reader.ReadToFollowing("PrintSettings"); n'a pas trouvé, je suis foutu !
    Le reader est a la fin du fichier et je ne sais pas comment remonter ?
    Quelle serait une bonne maniere de faire ?

    Merci de votre aide !

  2. #2
    Membre expérimenté Avatar de AJemni
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2008
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2008
    Messages : 242
    Par défaut
    le xmlReader posséde le format d'un fichier xml donc pour vous deplacer dans le fichier utilise les methodes fournis par la class tel : MoveToElement ou MoveToAttribute.

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Bonjour

    Je ne crois pas que MoveToElem() apporte une solution (en tout cas je ne vois pas laquelle)
    Car si je suis a la fin du fichier MoveToElem ne fait rien

    Voici un exemple de mon fichier XML qui ne contient PAS le Classe C_PrintSetting mais la classe PrintSetting

    Pour bien faire je dois me positionner sur C_PrintSetting et la lire si je la trouve

    Sinon je dois lire les Elem Country
    Voici la tentative

    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
        public void ReadXml(XmlReader reader)
        {
          if (!reader.IsStartElement("Document"))
          {
            return;
          }
          title = reader["Title"];
     
          bool prSetOk=reader.ReadToFollowing("C_PrintSettings"); // positionnement sur print settings
          if (prSetOk)
          {
            printSettings = C_PrintSettings.ReadXmlR(reader);
          }
          else
          {
            // QUE FAIRE ??  reader.MoveToElement();
          }
     
          foreach (DataProviders.DataProvider dataProvider in this._data.Children)
          {
            dataProvider.Visible = false;
          }
          // Attention on verifie si le read du printSetting a bien positionné sur le premier country
          if (!reader.Name.Equals("Country"))
          {
            reader.ReadToFollowing("Country");
          }
          do
          {
          }while (reader.ReadToNextSibling("Country"));
    }

    <?xml version="1.0" encoding="utf-8"?>
    <Document Type="Mapscope.Document.1" Title="" Version="1.0.0.2">
    <PrintSettings alignement="1" top="True" brush="-16777216">
    <TitleFont family="Arial" size="20" bold="False" italic="False" underline="False" />
    <DrawOptions DrawActiveCountry="False" DrawColorZoneOnly="False" DrawCountryBorder="False" DrawLegend="True" EntityContour="False" DrawAllRegion="False" />
    </PrintSettings>
    <Country Code="AT" Visible="true" />
    <Country Code="BE" Visible="true" />
    <Country Code="CH" Visible="true" />
    <Country Code="DE" Visible="true" />
    <Country Code="FR" Visible="true">
    <Layer Title="%DEP%" Active="true" Visible="true">
    <Entities>
    <Entity CC="FR" LC="1118" ID="33000024" Value="471019" selectedName="false" />

  4. #4
    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
    Un XmlReader ne permet de lire les données que de façon séquentielle. Utilise plutôt un XmlDocument pour pouvoir te "promener" librement dans le document...
    Ou alors, vu que le schéma du XML est assez simple, tu pourrais aussi utiliser la sérialisation XML

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Encore une fois, pourquoi utiliser un XmlReader (ou Writer) ? Si on excepte les cas d'écriture de XmlSerializer spécifiques (et encore) ou alors d'un éditeur Xml, pourquoi se compliquer la vie à gérer de manière séquentielle une structure de fichier qui vise en général à manipuler une représentation objet ?

    Le XML DOM est dans la majorité des cas (et même un peu plus si on ne considère que les cas évoqués sur ce forum ) bien plus adapté et plus facile d'utilisation.

    Tu écris un éditeur XML ? non ? alors utilise le DOM.

  6. #6
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    alors utilise le DOM.
    Tu veux dire un XmlDocument ?

    En fait, DOM je ne sais pas ce que ca veut dire et je découvre toute cette mecanique

    Rassure toi je sais cependant parser un fichier a la main mai ce n'est évidemment pas le but

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

Discussions similaires

  1. [D6][DataSet]repositionnement après refresh
    Par prolice dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/04/2005, 09h34
  2. Réponses: 4
    Dernier message: 31/03/2005, 10h33
  3. repositionnement dans page html
    Par Invité(e) dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 23/11/2004, 15h17
  4. [SAX] erreur lors de la creation du XMLReader
    Par vir dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 19/08/2004, 01h12
  5. Réponses: 5
    Dernier message: 17/06/2004, 23h38

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