1

我到处寻找,发现了一些非常有趣的 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?

4

2 回答 2

1

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

您最终对以下内容进行了有效比较:

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

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

于 2013-08-31T16:06:30.333 回答
0

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例如使用正则表达式。

于 2013-08-31T19:22:53.247 回答