2012-04-14 2 views
0

Недавно я опубликовал сообщение о попытке заставить XMLTextReader работать, и я, наконец, сделал. К сожалению, теперь я не могу заставить его взять данные из XML-файла, потому что я делаю что-то не так с моими операторами if. Мне нужно иметь эти операторы if внутри другого оператора if, потому что им нужно сначала создать класс Student. Я понятия не имею, как подойти к этому больше. Ниже мой код, я уверен, что это что-то глупое. Я не очень хорошо кодирую, поэтому я знаю его кое-что, что мне не хватает.Вложенные, если заявления не работают

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] Даже после того, как я говорю XMLReader, чтобы перейти к следующей строке с reader.MoveToCOntent(); он все еще пропускает все утверждения if.

Я начинаю программировать, буду признателен за любые новые идеи и предложения.

+0

Итак, что «не работает», и * как * это не работает? Если в названии не может быть сформулирована * реальная * проблема, это должно быть закрыто. –

+2

Более релевантный anwer по вашему другому вопросу: __do не использовать XmlReader__ (если ваши данные не намного> 100 МБ) –

+0

Используйте отладчик, чтобы проверить, действителен ли ваш первый оператор if, а затем перейти к следующему. Тем не менее, кажется странным, что вы проверяете, читает ли читатель.Name == «student», а затем снова проверяет, читает ли читатель.Name == «что-то другое». –

ответ

2

Для того чтобы первое заявление if было истинным, reader.Name уже должен быть «учеником». Любой вложенный if проверяет значение reader.Name как ничего, кроме «ученика», всегда будет ложным.

+0

Огромное спасибо Тунгу за ваш быстрый ответ. Единственная проблема заключается в том, что даже когда я добавляю (reader.MoveToContent();) после создания нового Student, он по-прежнему пропускает все инструкции if и просто устанавливает значение Student Average и добавляет его в список. Какие-либо предложения? – Jess

+0

'reader.MoveToContent()' не будет перемещать читателя вперед, если вы уже находитесь на узле контента, выдавая другой 'reader.MoveToContent()' после того, как ваша первая проверка 'if' ничего не сделает. Если вы хотите переместить читателя вперед, когда он уже находится на узле содержимого, вам нужно будет выпустить 'Read()'.Имейте в виду, что 'Read()' может высадить вас на неэлементном узле (например, в пробеле), поэтому вам нужно объединить его с 'MoveToContent()' – Tung

+1

. Я согласен с остальными комментаторами в том, что вы должны попробовать менее сложную подход к анализу Xml. Хотя XmlReader эффективен, может быть, не стоит того времени, когда вам придется инвестировать, чтобы получить его правильно, тем более, что вы не разбираете очень большой Xml. Если вы должны использовать XmlReader, обратитесь к [документации] (http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.aspx), так как вам нужно будет понять, как влияет каждый метод текущее положение читателя. – Tung

1

он все еще пропускает все, если заявления и просто устанавливает студент Средний и добавляет его в список

Первое, что я думаю, является то, что равенство по строке не удается, поэтому первое, что нужно попробовать это

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

, если это не работает, как хорошо, попробуйте использовать простые XmlDocument и посмотреть, если это работает, если нет, то я бы сказал что-то еще в вашем коде не так, что не видно формы при условии, что код ,

Простой пример использования XmlDocument можно найти здесь:

Reading XML File using XmlDocument

0

его не так легко сказать, если вы не загружать некоторые ошибки о том, почему он не работает. В синтаксисе нет ничего плохого. Я бы сказал, что для получения информации см. Ошибку отладки в visual studio. , и если вы не понимаете ошибку, тогда загрузите ее после этого, мы сможем вам помочь.

Я думаю, вы должны попытаться закрыть читателя. ваш читатель открыт. напишите reader.close() в конце.

Смежные вопросы