当xml可以不同时,选择具有特定子节点的节点

时间:2012-04-23 02:30:54

标签: c# xml xpath linq-to-xml xelement

我的代码有效,但我想看看是否有比我更好的更好的解决方案(我确定有!)。我有一个webservice,需要返回所有具有名为“updatedDate”的子节点的节点,其日期比传入日期更新。我要返回的xml对于每个查询可以是不同的,它们唯一的共同点是updatedDate节点。我目前正在使用带有xpath的linq到xml,这是代码:

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;

关于如何改进它的任何想法?

谢谢,

Annelie

1 个答案:

答案 0 :(得分: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);
相关问题