XML文档排序

我已经想出如何在正确的structyre中将节点附加到我的rss文档中。 我现在需要在pubDate顺序中对其进行排序,然后输出到屏幕。 看一下在线的例子,我发现了许多XDocument和Linq的东西,但没有找到XmlDocument。 抓住我的头,是否要废弃我的代码,并在XDocument中根据这里的建议解决这个问题,或者继续使用XMLDocument并找出一种排序方法。

使用XMLDocument我已经完全按照我想要的方式运行代码,只需将我的feed在将其吐出到屏幕时按pubDate顺序排序。 所以我想我会坚持这个时间。 我发现这篇文章http://support.microsoft.com/kb/555060和一个xslt有人发布在Stack Overflow中,但我不知道如何从我的代码中调用“XmlHelperFunctions”。 XSLT是我最简单的选择,还是有更简单的选择?

这是我的代码:

XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(rssFeed.ToString()); XmlNodeList nl = xmlDoc.SelectNodes("/rss/channel/item"); foreach (XmlNode xn in nl) { string title = xn["title"].InnerText; string link = xn["link"].InnerText; string desc = xn["description"].InnerText; string auth = xn["author"].InnerText; string pdate = xn["pubDate"].InnerText; XmlElement itemnode = xmlDoc.CreateElement("item"); itemnode.InnerXml = ""; itemnode["title"].InnerText = title; itemnode["link"].InnerText = link; itemnode["description"].InnerText = desc; itemnode["author"].InnerText = auth; itemnode["pubDate"].InnerText = pdate; xmlDoc.DocumentElement.SelectNodes("/rss/channel")[0].AppendChild(itemnode); } // Output to screen xmlDoc.Save(Response.Output); 

我的饲料

    My RSS Feed http://www.mylink.aspx    Top marks http://www.mymarks.aspx  <p>description field here</p>  Viv Thu, 16 Aug 2012 12:10:54 GMT   Costa Coffee http://www.Costa.aspx  <p>Costa Coffee have special offers.</p>  Mike Thu, 23 Aug 2012 15:55:53 GMT   Celebrate success http://www.Celebrate.aspx  <p>Lets all celebrate </p>  Viv Thu, 22 Aug 2012 09:10:21 GMT    

您可以使用Linq to XML相当快速,轻松地完成此操作。

如果使用XElement.Parse(…)解析XML,则可以使用OrderBy或OrderByDescending函数并非常轻松地更改内容。 这是一个简化的例子:

 XElement element = XElement.Parse(@"        "); var elements = element.Element("channel") .Elements("item") .OrderBy(e => DateTime.ParseExact(e.Attribute("pubDate").Value, "dd/MM/yyyy", null)) .Select(e => new XElement("item", new XElement("title", e.Attribute("title").Value), new XElement("pubDate", e.Attribute("pubDate").Value))); // Do transform here. element.Element("channel").ReplaceAll(elements); Console.Write(element.ToString()); 

XML不会与您的XML相同,但希望它可以让您了解您可以做什么。 您只需将XElement和XAttribute对象指定为新XML的内容,即可输出以下内容:

    something3 10/02/2010   something4 22/01/2011   something2 24/03/2012   something 22/11/2012    

我希望这很有用。