2016-10-28 4 views
1

У меня есть XML, и я хочу выбрать элемент на основе даты. Таким образом, у потомков Date есть список дат меньше, чем сегодня.выберите 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

Ваш запрос делает это уже, конечно, (если вы исправить '' ExpiryDate' к date')? Просто не удаляйте их. –

+0

@CharlesMager - Плохо, это была опечатка. Я попытался просмотреть его, не удаляя, но не смог его увидеть, хотя в 'q.ToList()' – mikemind

+0

Как в сторону при удалении, вы можете просто выполнить 'q.Remove()'. И используйте перегрузку 'XDocument.Parse', а не загрузку' StringReader'. –

ответ

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

Смежные вопросы