У меня есть следующий XML-файл. (Образец) .. Мне нужно отсортировать узлы «счета-фактуры» по атрибуту «InvcDate». Возможно ли это в Linq? Любая помощь приветствуется.Сортировка файла по значению элемента
Я пытался в течение некоторого времени, но у меня нет большого опыта работы с xml, и я относительный новичок в программировании, поэтому я был бы очень благодарен за любую помощь.
<?xml version="1.0" encoding="utf-8"?>
<Server>
<Name>AlignServer</Name>
<Params>
<marketNo>MT</marketNo>
<dateFrom>2015-01-06</dateFrom>
<dateTo>2015-01-09</dateTo>
<Sales>
<invoices>
<invoice>
<header>
<InvoiceNum>22947</InvoiceNum>
<InvcDate>2015/01/07-110104</InvcDate>
</header>
<item>
<SKU>6595456987453</SKU>
<Qty>-1</Qty>
</item>
</invoice>
<invoice>
<header>
<InvoiceNum>23056</InvoiceNum>
<InvcDate>2015/01/08-020627</InvcDate>
</header>
<item>
<SKU>9845256242255</SKU>
<Qty>-1</Qty>
</item>
</invoice>
<invoice>
<header>
<InvoiceNum>22899</InvoiceNum>
<InvcDate>2015/01/06-094505</InvcDate>
</header>
<item>
<SKU>5454256565452</SKU>
<Qty>-1</Qty>
</item>
<item>
<SKU>11111165454130</SKU>
<Qty>4</Qty>
</item>
</invoice>
</invoices>
</Sales>
</Params>
</Server>
Я попытался
XElement root = XElement.Load("C:\\xmlsort\\test.xml");
XElement[] sortedTables = root.Elements("invoices").OrderBy(t => (Datetime)t.Element("invdate")).ToArray();
root.ReplaceAll(sortedTables);
root.Save("C:\\xmlsort\\test.xml");
То, что я сделал до сих пор - с предложением от @ ec8or и, кажется, работает, но по-прежнему открыт для предложений:
XElement root = XElement.Load("C:\\xmlsort\\test.xml");
var invoices = from p in root.Descendants("invoice")
orderby DateTime.ParseExact(p.Element("header").Element("InvcDate").Value, "yyyy/MM/dd-hhmmss", CultureInfo.InvariantCulture)
select p;
XElement[] sortedTables = invoices.ToArray();
root.ReplaceAll(sortedTables);
root.Save("C:\\xmlsort\\output.xml");
вы пробовали что-нибудь ? - Показать нас –
XElement root = XElement.Load ("C: \\ xmlsort \\ test.xml"); XElement [] sortedTables = root.Elements ("invoices"). OrderBy (t => (datetime) t.Element ("invoice/InvcDate")). ToArray(); root.ReplaceAll (отсортированные таблицы); root.Save ("C: \\ xmlsort \\ test.xml"); – MaltaBd