我有这个XML文件,我想按年然后按月排序。我曾尝试使用linq到xml,但它不会对文件进行排序。
还有什么我需要的吗?
XML文件
<Monthly>
<Totals Month="1" Year="2019"><Total>698560</Total><Distinct>103798</Distinct></Totals>
<Totals Month="12" Year="2018"><Total>556091</Total><Distinct>90550</Distinct></Totals>
<Totals Month="11" Year="2018"><Total>638932</Total><Distinct>100398</Distinct></Totals>
<Totals Month="10" Year="2018"><Total>721583</Total><Distinct>106044</Distinct></Totals>
<Totals Month="9" Year="2018"><Total>620371</Total><Distinct>97455</Distinct></Totals>
</Monthly>
代码:
XmlDocument xml = new XmlDocument();
xml.LoadXml(XmlSource);
XmlNodeList MonthlyTotals = xml.SelectNodes("//Report/Monthly");
var list = MonthlyTotals.XPathSelectElements("//Report/Monthly").OrderBy(r => r.Value);
///添加了新逻辑,但是代码从未完成
var SortedListMonthlyTotals = new XElement("Monthly", MonthlyTotals.Element("Monthly")
.Elements()
.OrderBy(e => (int)e.Attribute("Year"))
.ThenBy(e => (int)e.Attribute("Month"))
);
答案 0 :(得分:2)
您可以执行以下操作。
var result = root.Elements("Totals")
.OrderBy(e => int.Parse(e.Attribute("Year").Value))
.ThenBy(e => int.Parse(e.Attribute("Month").Value));
完整代码
var str = @"<Monthly>
<Totals Month='1' Year='2019'><Total>698560</Total><Distinct>103798</Distinct></Totals>
<Totals Month='12' Year='2018'><Total>556091</Total><Distinct>90550</Distinct></Totals>
<Totals Month='11' Year='2018'><Total>638932</Total><Distinct>100398</Distinct></Totals>
<Totals Month='10' Year='2018'><Total>721583</Total><Distinct>106044</Distinct></Totals>
<Totals Month='9' Year='2018'><Total>620371</Total><Distinct>97455</Distinct></Totals>
</Monthly>";
var root = XElement.Parse(str);
var result = root.Elements("Totals")
.OrderBy(e => int.Parse(e.Attribute("Year").Value))
.ThenBy(e => int.Parse(e.Attribute("Month").Value));
输出