C# 如何根据xpath中的日期范围选择节点?

C# 如何根据xpath中的日期范围选择节点?,c#,.net,xpath,C#,.net,Xpath,我的XML: 我使用以下代码选择了一年的项目节点: XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(Server.MapPath("/rustlers/all-news.xml")); DataListArchive.DataSource = xmlDoc.SelectNodes("/items/item[contains(date,'2011')]"); DataListArchive.DataBind(); 但现在我需要选择日期为b

我的XML:

我使用以下代码选择了一年的项目节点:


XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath("/rustlers/all-news.xml"));
DataListArchive.DataSource = xmlDoc.SelectNodes("/items/item[contains(date,'2011')]");
DataListArchive.DataBind();
但现在我需要选择日期为btw 01-Apr-2011和31-Mar-2012的项目节点。如何将XML中的日期转换为实际日期值,并将其与范围进行比较

我喜欢这样的东西:


XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath("/rustlers/all-news.xml"));
DataListArchive.DataSource = xmlDoc.SelectNodes("/items/item[date between '01-APR-2011' and '31-MAR-2012']");
DataListArchive.DataBind();

在XPath 1.0中,没有通用的方法将字符串转换为日期,也没有操作日期的方法-针对您的具体情况(检查日期是否在特定年份的3月或4月):

*更新*

看过代码后,我想说最简单的方法是使用XPath获取所有
元素,然后使用C#-进行过滤,即获取
日期
子元素的值,使用
日期时间将其转换为日期时间。解析
,然后在C#代码中进行比较


可以向.NET XPath中添加扩展函数来完成所需的操作(请参阅),但这相当复杂,在这种情况下可能不值得付出努力。

这不能用单个XPath 1.0表达式来完成。您对XSLT1.0或XSLT2.0解决方案感兴趣吗?您的意思是在3月1日到4月30日之间?我应该更具体一些。我想带回日期为btw 2011年4月1日和2012年3月31日的项目节点。是的,我对XSLT 1.0或2.0解决方案感兴趣。问题编辑为更具体的日期。问题编辑为显示我正在使用的c#代码片段。我已经更新了我的问题,使其更具体的日期。还有Xpath 2.0吗?是的,有Xpath(和XSLT)2.0,但标准.NET库只实现1.0标准-要使用2.0,需要使用第三方库,如Saxon.Buh。我应该用LINQ还是别的什么?在没有第三方库的情况下,做这件事的优雅方式是什么?正如我在回答中所说:用C#进行过滤,我想你是对的。我对xpath代码的简短感到过于兴奋,我想我被它迷住了。我会和林克放屁一个小时左右,如果我做不到,我会按照你建议的老式方式做。谢谢你的帮助!!
/items/item[(contains(date,'April') or contains(date,'March')) and contains(date,'2010')]