2012-08-13 111 views
1

我的XML:http://www.lakelandcollege.ca/rustlers/all-news.xml如何根据xpath中的日期范围选择节点?

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


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

但现在我需要选择item节点日期是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(); 
+1

这不能用单个XPath 1.0表达式完成。您对XSLT 1.0或XSLT 2.0解决方案感兴趣吗? – 2012-08-14 02:26:44

+0

你是指3月1日至4月30日之间? – MiMo 2012-08-14 14:27:43

+0

我应该更具体。我想带回日期为2011年4月1日和2012年3月31日的项目节点。 是的我对XSLT 1.0或2.0解决方案感兴趣。 – 2012-08-14 15:52:48

回答

2

还有就是字符串转换为日期也没有XPath 1.0中处理日期没有通用的方法 - 为您的具体情况(检查是否一个日期是在三月或四月某一特定年份):

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

* UPDATE *

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

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

+1

我已经更新了我的问题,以便更具体地了解日期。还有Xpath 2.0吗? – 2012-08-14 15:54:40

+0

添加了我的c#代码 – 2012-08-14 16:05:43

+2

是的,有XPath(和XSLT)2.0,但标准的.NET库仅实现1.0标准 - 要使用2.0,您需要使用像Saxon这样的第三方库。 – MiMo 2012-08-14 16:39:17

相关问题