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

时间:2012-08-13 21:45:24

标签: c# .net xpath

我的XML:http://www.lakelandcollege.ca/rustlers/all-news.xml

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


XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath("/rustlers/all-news.xml"));
DataListArchive.DataSource = xmlDoc.SelectNodes("/items/item[contains(date,'2011')]");
DataListArchive.DataBind();

但现在我需要选择日期为2011年4月1日至2012年3月31日的项目节点。如何将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();

1 个答案:

答案 0 :(得分:2)

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

/items/item[(contains(date,'April') or contains(date,'March')) and contains(date,'2010')]

*更新*

看过代码我会说最简单的方法是使用XPath获取所有item元素,然后使用C#进行过滤 - 即得到date子的值element,使用DateTime.Parse将其转换为日期时间,然后使用C#代码进行比较。

可以将扩展函数添加到.NET XPath中以执行您需要的操作(请参阅this),但它非常复杂,在这种情况下可能不值得付出努力。