выберите узлы с определенным дочерним узлом, когда xml может быть другим

У меня есть код, который работает, но я хотел бы посмотреть, есть ли более приятное и лучшее решение, чем то, что у меня есть (я уверен, что есть!). У меня есть веб-служба, которая должна возвращать все узлы, у которых есть дочерний узел с именем «updatedDate» с датой, более поздней, чем переданная дата. XML, который я возвращаю, может быть разным для каждого запроса, единственное, что у них общего, — это узел updatedDate. В настоящее время я использую linq to xml с xpath, вот код:

XDocument allNodes = XDocument.Parse(result);

IEnumerable<XElement> nodesWithDates = allNodes.XPathSelectElements("//updatedDate");

XElement updatedNodes = new XElement("UpdatedNodes");

foreach (XElement node in nodesWithDates)
{
    DateTime date;

    if (DateTime.TryParse(node.Value, out date))
    {
        if (date > dateToCompare)
        {
            updatedNodes.Add(node.Parent);
        }
    }
}

return updatedNodes;

Есть идеи, как его улучшить?

Спасибо,

Аннели


person annelie    schedule 23.04.2012    source источник


Ответы (1)


Несколько другой и более компактный подход:

DateTime date;
var nodes = allNodes.Descendants("updatedDate")
                    .Where(x => DateTime.TryParse(x.Value, out date)
                                && date > dateToCompare)
                    .Select(x => x.Parent);

XElement updatedNodes = new XElement("UpdatedNodes", nodes);
person BrokenGlass    schedule 23.04.2012