我正在使用以下代码,只要我没有丢失其中一个子节点(例如URL),该代码就可以正常工作。如果它 缺少然后我的代码错误了。如何使其不会出错并只返回一个字符串“No Value”。
这是我的代码
string widgetsInfo =
loaded.Descendants("widget")
.Select((w, i) =>
new
{
WidgetIndex = i,
URL = w.Descendants("url").FirstOrDefault().Value,
Category = w.Descendants("PortalCategoryId").FirstOrDefault().Value
})
.Select(w => String.Format("Index:{0}; URL:{1}; CATEGORY:{2}; ",
w.WidgetIndex, w.URL, w.Category))
.Aggregate((acc, next) => acc + Environment.NewLine + next);
这是我正在解析的xml
string xml = @"<?xml version='1.0' encoding='UTF-8'?>
<widgets>
<widget>
<url>~/Portal/Widgets/ServicesList.ascx</url>
<castAs>ServicesWidget</castAs>
<urlType>ascx</urlType>
<parameters>
<PortalCategoryId>3</PortalCategoryId>
</parameters>
</widget>
<widget>
<url>www.omegacoder.com</url>
<castAs>ServicesWidget</castAs>
<urlType>htm</urlType>
<parameters>
<PortalCategoryId>41</PortalCategoryId>
</parameters>
</widget>
</widgets>";
答案 0 :(得分:1)
string widgetsInfo =
loaded.Descendants("widget")
.Select((w, i) =>
new
{
WidgetIndex = i,
URL = w.Descendants("url").FirstOrDefault() == null ? "No Value" : w.Descendants("url").FirstOrDefault().Value,
Category = w.Descendants("PortalCategoryId").FirstOrDefault() == null ? "No Value" : w.Descendants("PortalCategoryId").FirstOrDefault().Value
})
.Select(w => String.Format("Index:{0}; URL:{1}; CATEGORY:{2}; ",
w.WidgetIndex, w.URL, w.Category))
.Aggregate((acc, next) => acc + Environment.NewLine + next);
答案 1 :(得分:0)
尝试DefaultIfEmpty
linq子句。