gpt4 book ai didi

c# - XML文档排序

转载 作者:行者123 更新时间:2023-11-30 22:25:54 37 4
gpt4 key购买 nike

我已经想出如何在正确的结构中将节点附加到我的 rss 文档。我现在需要按 pubDate 顺序对其进行排序,然后输出到屏幕。查看在线示例,我发现了很多 XDocument 和 Linq 的东西,但没有发现 XmlDocument。绞尽脑汁是要废弃我拥有的代码并根据此处的建议找出如何在 XDocument 中执行此操作,还是继续使用 XMLDocument 并找出一种排序方法。

有了 XMLDocument,我的代码就完全按照我想要的方式工作了,只需要在它显示到屏幕上时按 pubDate 顺序对我的提要进行排序。所以我想我会暂时坚持这个。我找到了这篇文章 http://support.microsoft.com/kb/555060以及有人在 Stack Overflow 中发布的 xslt,但我不知道如何从我的代码中调用“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 = "<title></title><link></link><description></description><author></author><pubDate></pubDate>";
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);

我的 rss 提要

<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
<channel>
<title>My RSS Feed</title>
<link>http://www.mylink.aspx</link>
<description>
</description>
<item>
<title>Top marks</title>
<link>http://www.mymarks.aspx</link>
<description>
&lt;p&gt;description field here&lt;/p&gt;
</description>
<author>Viv</author>
<pubDate>Thu, 16 Aug 2012 12:10:54 GMT</pubDate>
</item>
<item>
<title>Costa Coffee</title>
<link>http://www.Costa.aspx</link>
<description>
&lt;p&gt;Costa Coffee have special offers.&lt;/p&gt;
</description>
<author>Mike</author>
<pubDate>Thu, 23 Aug 2012 15:55:53 GMT</pubDate>
</item>
<item>
<title>Celebrate success</title>
<link>http://www.Celebrate.aspx</link>
<description>
&lt;p&gt;Lets all celebrate &lt;/p&gt;
</description>
<author>Viv</author>
<pubDate>Thu, 22 Aug 2012 09:10:21 GMT</pubDate>
</item>
</channel>
</rss>

最佳答案

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

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

XElement element = XElement.Parse(@"
<rss>
<channel>
<item title='something' pubDate='22/11/2012'/>
<item title='something2' pubDate='24/03/2012'/>
<item title='something3' pubDate='10/02/2010'/>
<item title='something4' pubDate='22/01/2011'/>
</channel>
</rss>");

var elements = element.Element("channel")
.Elements("item")
.OrderBy<XElement, DateTime>(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 不会与您的相同,但希望它能让您了解可以做什么。您可以只指定 XElement 和 XAttribute 对象作为新 XML 的内容,这会输出以下内容:

<rss>
<channel>
<item>
<title>something3</title>
<pubDate>10/02/2010</pubDate>
</item>
<item>
<title>something4</title>
<pubDate>22/01/2011</pubDate>
</item>
<item>
<title>something2</title>
<pubDate>24/03/2012</pubDate>
</item>
<item>
<title>something</title>
<pubDate>22/11/2012</pubDate>
</item>
</channel>
</rss>

我希望这是有用的。

关于c# - XML文档排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12107097/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com