如何解析以下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]
在XML文件的第二部分缺失,因此会引发Home
错误。
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)}
我该如何解决?我在这做错了什么?
答案 0 :(得分: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),