2015-09-14 4 views
0

Я пытаюсь сортировать финиковые тег в моей XML по значению:даты Сортировать по значению В Xml C#

var noteElements = xDoc.Root.Descendants("Note").OrderBy(o => (DateTime)o.Element("date")).ToList(); 

foreach (XElement noteEl in noteElements) 
{ 
    string noteDateValue = noteEl.Element("date").Value; 
    noteEl.ReplaceWith(new XElement("notedate", noteEl, new XAttribute("date", noteDateValue))); 
} 

Это не работает. Даты не сортируются так, как ожидалось.

XML:

<Root> 
<Notes> 
    <notedate date="date here"><Note> 
    <date>1997-07-04T00:00:00</date> 
    </Note></notedate> 
    <notedate date="date here"><Note> 
     <date>1997-06-04T00:00:00</date> 
    </Note></notedate> 
</Notes> 
</Root> 

Любой, кто может объяснить, что я делаю неправильно?

+1

изменения '.OrderBy (о => (DateTime) o.Element ("Дата")' 'для .OrderBy (о => (DateTime) o.Element ("date"). Value'? – Johan

+0

@Johan: Я получаю ошибку: невозможно преобразовать строку типа в System.DateTime – Bryan

ответ

3

Вы заменяете каждый элемент Note элементом notedate. Порядок, в котором вы выполняете эту замену, не имеет значения.

Это звучит, как вы на самом деле хотите что-то вроде:

var notes = doc.Root.Element("Notes"); 
notes.ReplaceNodes(notes.Elements() 
         .OrderBy(x => (DateTime) x.Element("date")) 
         .Select(x => new XElement("notedate", 
          new XAttribute("date", "date here"), 
          x)); 
+0

Большое вам спасибо. Не могли бы вы объяснить код? – Bryan

+0

@Bryan: Well какой бит кода вы не понимаете? Я заменяю все содержимое элемента «Примечания» результатом «запроса», который упорядочивает элементы «Примечание» по дате и обертывает их в элемент «noteate» Что касается вашего второго вопроса, см. W что вы можете сделать для себя - подскажите: замените '' date here "' выражением, чтобы получить дату как 'DateTime' на основе' x' ... –

+0

Im очень новый для C#, но спасибо :). Я решил свою вторую проблему следующим образом: x.Element («date»). Значение Это правильный способ ее решения? – Bryan

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