2013-11-27 7 views
0

Как я могу разобрать следующий XML-файл?Простой XML-анализ синтаксиса Ошибка ссылки объекта

<Website.com xmlns=""> 
    <Matc> 
    <Id>1</Id> 
    <Date>2013-11-27T18:00:00+01:00</Date> 
    <Home>Moscow</Home> 
    </Matc> 
    <Matc> 
    <Id>2</Id> 
    </Matc> 
</Website.com> 

Я попытался следующий код, но он бросает, что Object reference not set to an instance of an object ошибка, так как [Date] и Home отсутствуют во второй части файла XML.

Dim ns As XNamespace = "" 
Dim matcFromXml = From m In xDoc.Descendants("Matc") Select New With { _ 
    .Id = IIf(m.Element(ns + "Id") Is Nothing, 0, m.Descendants(ns + "Id").FirstOrDefault().Value), _ 
    .[Date] = IIf(m.Element(ns + "Date") Is Nothing, DateTime.Now, UtcToDateTime(m.Descendants(ns + "Date").FirstOrDefault().Value)), _ 
    .Home = IIf(m.Element(ns + "Home") Is Nothing, "", m.Descendants(ns + "Home").FirstOrDefault().Value)} 

Как я могу это исправить? Что я здесь делаю неправильно?

ответ

1

Настоятельно рекомендуется бросить XElement к Integer или DateTime?, вместо того, чтобы читать Value свойства, именно по этой причине. Кроме того, рассмотрите возможность использования коалесцирующего оператора If.

Dim matcFromXml = From m In xDoc.Descendants("Matc") Select New With { _ 
    .Id = CInt(m.Descendants(ns + "Id").FirstOrDefault()), 
    .[Date] = If(CType(m.Descendants(ns + "Date").FirstOrDefault(), Date?), DateTime.Now), 
    .Home = If(CStr(m.Descendants(ns + "Home").FirstOrDefault()),"")} 

Если нет Id элемента, а затем с помощью простого CInt для Id вызовет ошибку. Вместо этого используйте If и CType:

.Id = If(CType(m.Descendants(ns + "Id").FirstOrDefault(),Integer?),0), 
Смежные вопросы