2015-06-30 2 views
0

У меня есть этот тип формата XML:Чтение данных XML в C# с XmlTextReader

<?xml version="1.0" encoding="utf-8"?> 
<root> 
<descriptor> 
    <feature>5.12</feature> 
    <feature>0.0002827647</feature> 
    <feature>0.0147277</feature> 
    <feature>0.00037847</feature> 
</descriptor> 
</root> 

на примере MSDN я пытаюсь прочитать это так:

Matrix<float> ObjectDescriptors = new Matrix<float>(200, 4); 
     XmlTextReader reader = new XmlTextReader("descriptors.xml"); 
     int i = -1; 
     int ii = 0; 
     while (reader.Read()) 
     { 
      if (reader.Name == "feature" && ii < 4) 
      { 
       String currStr = reader.Value; 
       ObjectDescriptors[i, ii] = Convert.ToSingle(currStr);      
       ii++; 
       if (ii == 4) ii = 0; 
      } 
      else if (reader.Name == "descriptor") i++; 
     } 

я получаю следующее ошибка в строке

AgrObjectDescriptors[i, ii] = Convert.ToSingle(currStr); 

необработанное исключение типа «System.FormatException» произошло в mscorlib.dll Дополнительная информация: Строка ввода не была в правильном формате.

Похоже, "особенность" узлового обнаружения (считыватель = {Элемент, Name = "особенность"}), но его содержание пустой ("")

использованием System.Xml; включен

Было бы хорошо, если бы кто-нибудь сказал мне, почему эта ошибка возникает! Спасибо!

+0

replacebyObjectDescriptors [i, ii] = reader.ReadElementContentAsFloat(); решил проблему –

+0

ваш читатель. Пустое. – Megha

ответ

0

reader.Read будет проходить через каждую часть XML, а элементы не совпадают с текстом, который внутри них.

Итак, как только вы найдете элемент, который ищете, вы должны прочитать текст внутри.

Try замена:

String currStr = reader.Value; 

С:

String currStr = reader.ReadString(); 
0

заменен

ObjectDescriptors[i, ii] = reader.ReadElementContentAsFloat(); 

решить эту проблему. вопрос закрыт.

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