2016-10-28 11 views
1

私はXMLを持っており、日付に基づいて要素を選択したいと考えています。したがって、日付の子孫は今日よりも少ない日付のリストを持っています。ノードに基づいてxml子孫を選択

XMLは、この

<Dates> 
<Department> 
<ID>Food</ID> 
<Date>25-11-2016</Date> 
</Department> 
<Department> 
<ID>Sport</ID> 
<Date>26-10-2016</Date> 
</Department> 
</Dates> 

のような値は、今私は、それぞれの日付が今日よりも小さく、以下のクエリは、日付を選択し、XMLから項目を削除する唯一の要素を選択する必要がありました。

XDocument newXML = XDocument.Load(new StringReader(xmlValues)); 
var q = from node in newXML.Descendants("Date")   
     let attr = node.Value where attr != null && DateTime.ParseExact 
     (attr, "dd-MM-yyyy", CultureInfo.InvariantCulture) < DateTime.Today  
     select node.Parent;    
q.ToList().ForEach(x => x.Remove()); 

今日、日付が今日よりも低い以下のアイテムのみを選択するにはどうすればよいですか?

<Department> 
<ID>Sport</ID> 
<Date>26-10-2016</Date> 
</Department> 
+1

あなたのクエリは既に、きっと(あなたが 'Date'に' ExpiryDate'を修正する場合)ことをしてみ?ただそれらを削除しないでください。 –

+0

@CharlesMager - 私の悪い、それはタイプミスでした。私は削除せずにそれを表示しようとしましたが、 'q.ToList()'でそれを見ることはできませんでした。 – mikemind

+0

削除に関しては、単にq.Remove()を実行することができます。また、 'StringReader'をロードするのではなく、' XDocument.Parse'オーバーロードを使用してください。 –

答えて

0

この

  string xml = 
       "<Dates>" + 
        "<Department>" + 
        "<ID>Food</ID>" + 
        "<Date>25-11-2016</Date>" + 
        "</Department>" + 
        "<Department>" + 
        "<ID>Sport</ID>" + 
        "<Date>26-10-2016</Date>" + 
        "</Department>" + 
       "</Dates>"; 

      XElement dates = XElement.Parse(xml); 

      List<XElement> departs = dates.Descendants("Department").Where(x => DateTime.ParseExact(x.Element("Date").Value, "dd-MM-yyyy", System.Globalization.CultureInfo.InvariantCulture) < DateTime.Now).ToList(); 
+0

このlinqがアイテムを識別したかどうかを確認する方法はありますか? – mikemind

+0

結果はリストオブジェクトであり、リストのカウントまたは長さを取得できます。 – jdweng

関連する問題