XPath 测试日期



我已经搜索了高低,发现了XPATH的一些非常有趣的功能,但是,我还没有找到测试DATES的方法。

我有一个 Date 属性,我想用它来获取节点集合。

<History>
        <item>
          <Name>string</Name>
          <Location>string</Location>
          <VisitDate>01/08/2013</VisitDate>
          <Description>string</Description>
        </item>
</History>

XPath 代码很高兴地找到一个等于,但我需要执行 => 测试。

Dim doc As New Xml.XmlDocument
doc.Load(filename)
Dim d As Date = DateAdd(DateInterval.Day, -7, Today)
s = "//History/item[VisitDate=>'" & d.ToString("dd/MM/yyyy") & "']"
Dim nodes As Xml.XmlNodeList = doc.SelectNodes(s)

现在这行不通了。它在SelectNodes(s)出错,所以它显然不喜欢">"位。

XPath 中是否有任何"日期"函数,我找到了boolean(); concat() ; true() ; not true() ; translate() ; substring()等等,我假设我最终将不得不使用这些的组合,也许还有其他的组合,但我无法弄清楚如何做到"大于"......

有没有人在这方面了解

XPath?

我一直发现在 XPath 中比较日期的最简单方法是将它们转换为 YYYYMMDD 形式的整数,即标准 XML 日期格式,但删除了连字符。

您最终会得到以下几点的有效比较:

translate('2013-08-01', '-', '') > 20130824

很遗憾,您的日期存储为 DD/MM/YYYY 而不是 YYYY-MM-DD,因为这意味着您必须与substring()一起做一些工作来重新组织值,但这应该很容易。

XPath 2.0 具有比 XPath 1.0 更好的日期和时间处理能力。.NET 中的本机 XPath 处理器仅支持 XPath 1.0,但至少在两个在 .NET 下运行的第三方产品中提供了对 2.0 的支持:Saxon(我的产品(和 XmlPrime。

XPath 2.0仍然要求日期是ISO格式yyyy-mm-dd,但它很容易从dd/mm/yyyy转换为这个,例如使用正则表达式。

最新更新