LINQ - > XML处理不存在的元素节点

时间:2011-02-21 17:05:13

标签: c# linq-to-xml

我正在使用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,
    };

但是,一旦我偶然发现没有“概述”标签的条目,问题就会到来......如果元素“概述”不存在,有没有办法返回一个空字符串?

1 个答案:

答案 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做同样的事情。)

请注意,XAttributeXElement的所有自定义转化都具有可为空的版本,例如:转换为int?而不是int ...它们都以相同的方式工作,如果原始元素或属性为null,则返回null值。