1

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

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

现在,这适用于所有情况,除非将毫秒附加到结束时间而不是开始时间,例如:

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

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

4

1 回答 1

4

大概没有对StartandEnd元素有效的模式绑定。在这种情况下,查询正在执行 xs:untypedAtomic 比较,它有效地比较字符串值,其中"Z"比较大于"."

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

    for $d at $count in ./ty:Detections/Detection
    where xs:dateTime($d/Start) > xs:dateTime($d/End)
    return $count
于 2015-01-28T21:18:20.580 回答