Problème de lecture d'attributs xml dans un noeud [Résolu]

Signaler
Messages postés
3
Date d'inscription
dimanche 30 novembre 2003
Statut
Membre
Dernière intervention
21 janvier 2009
-
Messages postés
3
Date d'inscription
dimanche 30 novembre 2003
Statut
Membre
Dernière intervention
21 janvier 2009
-
Bonjour,

J'ai un fichier xml que voici, dont je n'arrive pas à lire le noeud Level1 (affiché en gras).
Je me casse la tête dessus depuis 2 heures sans comprendre ce qui ne va pas.
J'utilise SharpDevelopper, et le framework .Net 2.0

<?xml version= "1.0" encoding="utf-8"?>
<Game>
  <General>
    <Name>Steph test</Name>
    <Type>Texas Hold'em</Type>
    <Limit>Limite de pot</Limit>
    <Duration>4</Duration>
    5

    <LevelsCount>4</LevelsCount>
    <Chips>
      <Chip1>10</Chip1>
      <Chip2>25</Chip2>
      <Chip3>50</Chip3>
      <Chip4>100</Chip4>
      <Chip5>250</Chip5>
      <Chip6>500</Chip6>
    </Chips>

    <Levels>
      <Level1 Level="1" SmallBlind="10" BigBlind="20" Ante="0" Time="20" Break="0" />
      <Level2 Level ="2" SmallBlind="20" BigBlind="40" Ante="0" Time="20" Break="0" />
      <Level3 Level="3" SmallBlind="40" BigBlind="80" Ante="0" Time="20" Break="0" />
      <Level4 Level="4" SmallBlind="80" BigBlind="160" Ante="0" Time="20" Break="0" />
    </Levels>
  </General>
</Game>

Voilà ci-dessous la partie correspondante du code source. Je me place via une boucle sur chacun des noeuds puis j'en lit les attributs.
Mon problème est que quand i vaut 1 mon code lit les valeurs d'attributs du Level2 et je ne vois pas pourquoi (d'ailleurs normalement je devrais mettre i<=iLevelsCount comme limite de boucle mais le reader ne trouve pas de noeud Level4 et crashe).
// Levels
      reader.ReadStartElement("Levels");
                for (int i=1;i<iLevelsCount;i++)
                { 
                    // Go to start node Level i
                    reader.ReadStartElement(string.Concat("Level",i.ToString()));
                    // Read it's attributes
                    iLevelNumber=int.Parse(reader.GetAttribute("Level"));
                    iSmallBlind=int.Parse(reader.GetAttribute("SmallBlind"));
                    iBigBlind=int.Parse(reader.GetAttribute("BigBlind"));
                    iAnte=int.Parse(reader.GetAttribute("Ante"));
                    iTime=int.Parse(reader.GetAttribute("Time"));
                    iBreak=int.Parse(reader.GetAttribute("Break"));
                   
                    // Add the level on tournament
                    itsLevels.AddALevel(iLevelNumber, iSmallBlind, iBigBlind, iAnte, iTime, iBreak);
                }

Voilà je fais appel à un oeil extérieur, et à votre expérience pour m'aider

4 réponses

Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
25
Bonjour,

Pour ce faire, je te reviens vers un très bon tutorial de Bidou qui te permettra de résoudre facilement ton problème.
Cela ne devrait pas être compliqué une fois la lecture effectuée.

http://www.csharpfr.com/tutoriaux/XPATH-LANGUAGE_536.aspx

Bonne journée,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Messages postés
3
Date d'inscription
dimanche 30 novembre 2003
Statut
Membre
Dernière intervention
21 janvier 2009

Merci Billou_13

J'ai fait simple sans xPathNavigator mais ca fonctionne, c'est l'essentiel.
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
25
Re,

La solution "Standard" du tutorial montre aussi comment faire sans XPathNavigator avec XmlDocument.

Bonne journée,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Messages postés
3
Date d'inscription
dimanche 30 novembre 2003
Statut
Membre
Dernière intervention
21 janvier 2009

Oui c'est ca, j'ai fait avec XmlDocument, et SelectSingleNode pour me placer au bon endroit