При попытке установить пакет самостоятельно появляется та же ошибка.
Тем не менее, при поиске этого пакета на pypi.org, кажется, что последняя выпущенная версия была в 2012 году, и ссылка там на домашнюю страницу проекта приводит к почти полностью пустой веб-странице. Таким образом, я бы предположил, что этот пакет больше не существует.
XElement на самом деле имеет интересные явные операторы преобразования , которые делают правильную вещь в этом случае.
Так, редко на самом деле необходимо получить доступ .Value
свойство.
Это - все, в чем Вы нуждаетесь для своей проекции:
var items =
from g in xDocument.Root.Descendants("Group").Elements("Entry")
select new
{
name = (string) g.Element("Name"),
id = (string) g.Element("ID") ?? "none",
};
И если Вы предпочли бы использовать значение ID
как целое число в Вашем анонимном типе:
var items =
from g in xDocument.Root.Descendants("Group").Elements("Entry")
select new
{
name = (string) g.Element("Name"),
id = (int?) g.Element("ID"),
};
Как насчет:
var items = from g in xDocument.Root.Descendants("Group").Elements("Entry")
let idEl = g.Element("ID")
select new
{
name = (string)g.element("Name").Value,
id = idEl == null ? "none" : idEl.Value;
};
, если это блюет, то FirstOrDefault()
и т.д. могло бы быть полезным, еще просто, используют дополнительный метод (как уже предложено).
В аналогичной ситуации я использовал дополнительный метод:
public static string OptionalElement(this XElement actionElement, string elementName)
{
var element = actionElement.Element(elementName);
return (element != null) ? element.Value : null;
}
использование:
id = g.OptionalElement("ID") ?? "none"