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

标签 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();

最佳答案

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

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

* 更新 *

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

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

关于c# - 如何根据 xpath 中的日期范围选择节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11942793/

相关文章:

.net - 什么会导致 GZipStream 压缩数据过多地填充零?

python - 如何在 selenium (python) 中接收子节点的内部 HTML?

c# - Xamarin - MediaPicker 不显示适用于 iOS 的 videoPicker

c# - 我可以限制 C# 函数仅接受字符串文字吗?

c# - ASP.NET ControllerBase 扩展方法在 Razor View 上不起作用

xslt - 查找具有特定子元素但没有文本节点的元素

java - 使用 JDom 的 XPath

c# - 如何对依赖于 HttpContext.Current 和 Sitecore.Context 的类进行单元测试?

c# - 如何访问 IQueryable<T> 对象中的连续元素?

c# - 从不同程序集加载合并的 ResourceDictionary 失败