2012-04-14 3 views
0

Je viens tout juste de publier un article sur la tentative d'utilisation d'un XMLTextReader, ce que j'ai finalement fait. Malheureusement, maintenant je ne peux pas l'obtenir pour prendre les données du fichier XML parce que je fais quelque chose de mal avec mes instructions if. Je dois avoir ces instructions if dans une autre instruction if car elles nécessitent que la classe Student soit créée en premier. Je n'ai aucune idée de comment aborder cela plus. Voici mon code, je suis sûr que c'est quelque chose de stupide. Je ne suis pas un bon codage, donc je sais que c'est quelque chose qui me manque.Les instructions If imbriquées ne fonctionnent pas

while (reader.Read()) 
    { 
     reader.MoveToContent();    

     if (reader.NodeType == XmlNodeType.Element && reader.Name == "student") 
     { 
      Student s = new Student(); 

       if (reader.Name == "id") 
       { 
        s.ID = reader.ReadString(); 
       } 
       if (reader.Name == "firstname") 
       { 
        s.FirstName = reader.ReadString(); 
       } 
       if (reader.Name == "lastname") 
       { 
        s.LastName = reader.ReadString(); 
       } 
       if (reader.Name == "score") 
       { 
        s.TestScores.Add(Convert.ToInt32(reader.ReadString())); 
       } 
      s.Average = 6.00; 
      Students.Add(s); 
     } 
    } 

[EDIT] Même après que je dis la xmlreader de passer à la ligne suivante avec reader.MoveToCOntent(); il saute toujours toutes les instructions if. Je suis des débutants dans la programmation, j'apprécierais de nouvelles idées et suggestions.

+0

Alors qu'est-ce que "ne fonctionne pas", et * comment * ça ne marche pas? Sauf si le problème * real * peut être résumé dans le titre, cela devrait être fermé. –

+2

L'anwer le plus pertinent pour votre autre question: __ne pas utiliser XmlReader__ (sauf si vos données dépassent 100 Mo) –

+0

Utilisez le débogueur pour vérifier si votre première instruction if est valide, puis passez à la suivante. Cependant, il semble étrange que vous vérifiiez si reader.Name == "student" et que vous vérifiiez à nouveau si reader.Name == "quelque chose de différent". –

Répondre

2

Pour que la première déclaration if soit vraie, reader.Name doit déjà être "étudiant". Tout if imbriqué vérifie que la valeur de reader.Name pour être autre chose que «étudiant» sera toujours fausse.

+0

Merci beaucoup Tung pour votre réponse rapide. Le seul problème est que même lorsque j'ajoute (reader.MoveToContent();) après avoir créé le nouvel étudiant, il ignore toujours toutes les instructions if et définit simplement la moyenne des étudiants et l'ajoute à la liste. Aucune suggestion? – Jess

+0

'reader.MoveToContent()' ne déplacera pas le lecteur vers l'avant si vous êtes déjà sur un noeud de contenu, en émettant un autre 'reader.MoveToContent()' après votre première vérification 'if'. Si vous voulez faire avancer le lecteur alors qu'il se trouve déjà sur un nœud de contenu, vous devrez lancer 'Read()'.Gardez à l'esprit que 'Read()' peut vous poser sur un nœud non élément (tel qu'un espace), donc vous devez le combiner avec 'MoveToContent()' – Tung

+1

Je suis d'accord avec le reste des commentateurs que vous devriez essayer un moins compliqué approche pour analyser le Xml. Bien que le XmlReader soit efficace, il ne vaut peut-être pas le temps que vous aurez à investir pour le faire correctement, d'autant plus que vous n'analysez pas le très grand format Xml. Si vous devez utiliser XmlReader, reportez-vous à [documentation] (http://msdn.microsoft.com/fr-fr/library/system.xml.xmlreader.aspx), car vous devez comprendre comment chaque méthode affecte la position actuelle du lecteur. – Tung

1

il saute encore sur toutes les instructions if et définit simplement l'élève moyenne et ajoute à la liste

La première chose que je pense est que l'égalité sur la chaîne échoue, alors première chose à essayez est

if (reader.Name.Equals("id",StringComparison.InvariantCultureIgnoreCase)).. 

si cela ne fonctionne pas aussi bien, essayez d'utiliser simplement XmlDocument et voir si cela fonctionne, sinon, je dirais quelque chose d'autre dans votre code est erroné, ce qui est une forme visible le code fourni .

Un simple échantillon d'utilisation de XmlDocument peut trouver ici:

Reading XML File using XmlDocument

0

ne est pas facile de dire à moins que vous téléchargez des erreurs sur les raisons de son ne fonctionne pas. Il n'y a rien de mal avec la syntaxe. Je dirais voir l'erreur de débogage dans le studio visuel au lieu d'obtenir des détails. et si vous ne comprenez pas l'erreur puis téléchargez-le entendre après que nous puissions vous guider. Je pense que vous devriez essayer de fermer le lecteur. votre lecteur est ouvert. écrivez reader.close() à la fin.

Questions connexes