XQuery:将日期时间与毫秒进行比较

时间:2015-01-28 20:37:31

标签: python xpath xquery berkeley-db-xml

我在Python中有一个验证模块,它在XML文档上执行XQuery,以检查<Start>次之后是否有<End>次,并返回它们的计数。查询如下:

    for $d at $count in ./ty:Detections/Detection
        where $d/Start > $d/End
        return $count

现在这种方法适用于所有情况,除非将毫秒附加到结束时间但 a开始时间,例如:

        <Start>2009-02-23T02:53:14Z</Start>
        <End>2009-02-23T02:53:14.226Z</End>

这总是返回True,即使14显然小于14.22。 如果我在这里<Start>时添加一个小数位,它可以工作 - 但有没有更好的解决方案?

1 个答案:

答案 0 :(得分:4)

据推测,StartEnd元素没有架构绑定。在这种情况下,查询正在执行xs:untypedAtomic比较,它有效地比较字符串值,其中"Z"比较大于"."

您想要的是xs:dateTime比较,因此您应该在将元素值转换为该类型后对其进行比较。因此查询应如下所示:

    for $d at $count in ./ty:Detections/Detection
    where xs:dateTime($d/Start) > xs:dateTime($d/End)
    return $count