2013-11-27 3 views
0

어떻게 다음 XML 파일을 구문 분석 할 수 있습니까? 간단한 XML 파싱 throw 객체 참조 오류

<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> 

나는 다음 코드를 시도하지만 [Date]Home 이후 Object reference not set to an instance of an object 오류가 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

정확히 Value 속성을 읽는 대신 XElementInteger 또는 DateTime? 번으로 전송하는 것이 좋습니다. 또한 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 요소가없는 경우. 대신 IfCType을 사용하십시오.

.Id = If(CType(m.Descendants(ns + "Id").FirstOrDefault(),Integer?),0),