2012-04-23 85 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

相關問題