Здесь есть три проблемы:
- Вы звоните
xdoc.Elements("url")
, который никогда не вернет никаких элементов, потому что нет элементов url
в качестве прямого потомка документа;вы бы хотели xdoc.Root.Elements
найти url
элементы в корневом элементе - . Вы предоставляете локальное имя элементов, но из-за дефолта пространства имен онина самом деле в пространстве имен
"http://www.sitemaps.org/schemas/sitemap/0.9"
, которое вы не указали, поэтому он не найдет никаких элементов - Вы находите последовательность с максимальными
DateTime
значениями, по одному наurl
элемент, который почти наверняка не то, что вы хотите сделать - вы, вероятно, хотите максимум по всем URL.
Кроме того, неясно, почему высоздание нового анонимного типа с одним свойством - это , обычно , бесполезно.
Вот пример, который работает для ваших примеров данных:
using System;
using System.Linq;
using System.Xml.Linq;
public class Test
{
static void Main()
{
var doc = XDocument.Load("test.xml");
XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9";
var max = doc.Root
.Elements(ns + "url")
.Max(url => (DateTime) url.Element(ns + "lastmod"));
Console.WriteLine(max);
}
}
В качестве альтернативы, если естьникогда не будет никаких других lastmod
элементов, вы можете просто использовать Descendants
в самом документе:
var max = doc.Descendants(ns + "lastmod").Max(x => (DateTime) x);