Ваш запрос возвращает записи для обоих виджетов. Я попробовал ваш код без изменений.
Следующий запрос поможет вам также получить индекс для каждого виджета:
var widgets = loaded.Descendants("widget").Select((w, i) =>
new
{
WidgetIndex = i,
URL = w.Descendants( "url" )
.FirstOrDefault()
.Value,
Category = w.Descendants("PortalCategoryId")
.FirstOrDefault()
.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);