2016-12-27 11 views
0

Я читал в некоторых данных из файлов XML с помощью DataSet.ReadXML()DataSet.ReadXml - Как поймать «входная строка не в правильном формате»

Моего вызова выглядит следующим образом (где XmlFileName является string ж/путь к XML-файл):

this.dataSet.ReadXml(XmlFileName, XmlReadMode.InferTypedSchema); 

Этот код ранее использовался XmlReadMode.Auto, однако мы сталкивались проблемы с образом лечил типы данных. Мы успешно используем InferTypedSchema в течение нескольких недель. Недавно мы столкнулись с несколькими проблемами.

я сводился этим вопрос: мы имеем поле в нашем файле XML под названием «Product_UPC»

enter image description here.

Это поле всегда (надеюсь) содержит числа. Мы только что получили значение в этом поле с завершающим пробелом в конце, так что это было что-то вроде «123456»

ReadXml() с InferTypedSchema параметра не нравится это, и бросил исключение внутренне, что "The input string was not in a correct format".

enter image description here

Я полагаю, что, так как предыдущие значения «Product_UPC» были интерпретированы как числовая ранее в файле XML, .NET теперь преобразование всех будущих значений того же поля в номера тоже.

Поскольку ошибка "The input string was not in a correct format" может быть выбрана по ряду причин, я не могу предположить, что проблема связана с самим UPC, и я не знаю, какое точное значение в файле XML имеет проблему, чтобы сообщить об этом пользователю , Эти файлы в конечном итоге составляют 10 000 строк, поэтому попросить пользователя не выполнять сканирование для конечных пробелов.

Любая помощь или идеи были бы замечательными.

+0

Опубликуйте схему (.xsd) и подтвердите ее перед созданием DataSet. Это позволит вам убедиться, что данные в XML-файле находятся в правильном формате, прежде чем пытаться загрузить его в DataSet. Это также может дать вам список проблем, которые нужно сообщить пользователю. – Kevin

+0

Похоже, у вас может быть место после 123456. Вы сохранили xml со встроенной схемой? Вы проверили схему, чтобы увидеть, является ли тип строкой или целым? Вы можете добавить схему в xml следующим образом: ds.WriteXml (имя_файла, XmlWriteMode.WriteSchema); – jdweng

ответ

0

Я предлагаю вам использовать System.Xml.Linq.XElement и шаблон репозитория. Вы можете сделать класс Position таким же, как тег позиции в xml-файле. Вы можете прочитать файл и заполнить Object objetc или list. Простой пример

class Position { } 
class Repository 
{ 
    private XElement xlmRecords; 
    public Repository(string filePath) 
    { 
     xlmRecords = XElement.Load(filePath); 
    } 
    public List<Position> FindAll() 
    { 
     return xlmRecords.Elements("position") 
      .Select(position => 
      { 
       return new Position 
       { 
        //You fill the Position properties view xml position values 
       }; 
      }).ToList(); 
    } 
}