2013-09-28 6 views
0

В моей программе C# я загружаю данные о машине из файла xml в объекты автомобиля.Проверить отсутствующий элемент int xml

Это мой XML-файл:

<Car> 
    <CarID>1</CarID> 
    <CarName>Honda</CarName> 
    <CarColor>Blue</CarColor> 
    </Car> 
    <Car> 
    <CarName>Ford</CarName> 
    <CarColor>Yellow</CarColor> 
    </Car> 
    <Car> 
    <CarID>3</CarID> 
    <CarName>BMW</CarName> 
    <CarColor>Green</CarColor> 
    </Car> 

Обратите внимание, что второй вход автомобиля не имеет идентификатора. Поэтому мне нужно будет проверить это, чтобы избежать нулевого исключения.

Я загружать данные XML в моем C# код, как это:

 List<Car> Cars = 
(
    from el in XDocument.Load("XML_Files/cars.xml").Root.Elements("Car") 
    select new Car 
    { 
     CarID = (int)el.Element("CarID"), 
     CarName = (string)el.Element("CarName"), 
     CarColor = (string)el.Element("CarColor") 
    }).ToList(); 

Я прочитал в другой вопрос, чтобы обойти это, для строковых данных, мы заменим это:

CarName = (string)el.Element("CarName") 

с этим:

CarName = ((string)el.Element("CarName") != null) ? (string)el.Element("CarName") : string.Empty 

это прекрасно работает для строковых значений, но то, что я не могу понять, как применять этот л ogic для значений int.

Так как же я могу изменить эту строку:

CarID = (int)el.Element("CarID") 

Для проверки на нулевое значение?

Я пробовал этот способ, но он не работает:

CarID = ((int)el.Element("CarID") >= 0) ? Convert.ToInt32(el.Element("CarID").Value) : 0 

Есть предложения?

ответ

1

В двух примерах вы делаете две принципиально разные проверки. В примере string вы проверяете, является ли элемент null. В примере int вы предполагаете, что он существует, и прыгайте прямо, чтобы проверить целочисленное значение. Сначала проверьте, что это не null, как вы делаете с примером string.

CarID = (el.Element("CarID") != null) ? Convert.ToInt32(el.Element("CarID").Value) : 0; 
+0

Это замечательно. Благодаря! – Zolt

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