2012-04-23 91 views
0

我有可用的代码,但我想看看是否有比我有的更好,更好的解决方案(我确定有!)。我有一个web服务需要返回所有具有名为“updatedDate”的子节点的节点,其日期比传入的日期更近。我返回的XML对于每个查询都可能不同,它们唯一共同的就是updatedDate节点。我目前正在使用linq to xml with xpath,代码如下:当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

一个稍微不同的,更紧凑的方法:

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); 
+0

这是一个更好的万亿次 - 谢谢! – annelie 2012-04-23 03:32:34

相关问题