我正在使用Linq来解析xml文件,因为Linq占用的代码更少,但我遇到了一个小问题,即一致的xml文件。我正在尝试从xml解析出一个Series类,它基本上是这样设置的:
<series>
<showid>5</showid>
<showname>fringe</showname>
<overview>description of the tv-show fringe.</overview>
</series>
这一切都很好,可以使用以下代码轻松解析:
var series = from serie in xdoc.Descendants ("Series")
select new TvShow()
{
ShowID = (string) serie.Element("seriesid").Value,
ShowName = (string) serie.Element ("SeriesName").Value,
ShowDescription = (string) serie.Element ("Overview").Value,
};
但是,一旦我偶然发现没有“概述”标签的条目,问题就会到来......如果元素“概述”不存在,有没有办法返回一个空字符串?
答案 0 :(得分:6)
绝对。不要使用Value
属性 - 请改用explicit conversion to string。这样,如果元素不存在,你将获得null
,并且你可以使用空合并运算符:
var series = from serie in xdoc.Descendants("Series")
select new TvShow()
{
ShowID = (string) serie.Element("seriesid"),
ShowName = (string) serie.Element("SeriesName"),
ShowDescription = (string) serie.Element("Overview") ?? "",
};
(显然你也可以为ShowName和ShowID做同样的事情。)
请注意,XAttribute
和XElement
的所有自定义转化都具有可为空的版本,例如:转换为int?
而不是int
...它们都以相同的方式工作,如果原始元素或属性为null,则返回null值。