Метод XElement.Element ожидает XName.
Вы проходите через строку, что означает, что она неявно преобразуется в XName без присоединенного пространства имен.
Другими словами, ваши вызовы XElement.Element()
запрашивают элементы с именем channel
без пространства имен, но элементы channel
в вашем примере XML находятся в пространстве имен http://purl.org/rss/1.0/
, поскольку атрибут xmlns="http://purl.org/rss/1.0/"
в <rdf:RDF>
.
Чтобы правильно извлекать элементы канала при наличии пространства имен, вы можете сделать это:
var ns = XNamespace.Get("http://purl.org/rss/1.0/");
currentLocation = currentLocation.Element(ns + "channel");
Использование оператора + в XNamespace и строке создает XName с присоединенным пространством имен.
Чтобы поддерживать оба стиля этого документа, проверьте, имеет ли XDocument.Root
пространство имен с ожидаемым значением URI. Для этого вы можете использовать XElement.GetDefaultNamespace () .