我在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>
时添加一个小数位,它可以工作 - 但有没有更好的解决方案?
答案 0 :(得分:4)
据推测,Start
和End
元素没有架构绑定。在这种情况下,查询正在执行xs:untypedAtomic比较,它有效地比较字符串值,其中"Z"
比较大于"."
。
您想要的是xs:dateTime比较,因此您应该在将元素值转换为该类型后对其进行比较。因此查询应如下所示:
for $d at $count in ./ty:Detections/Detection
where xs:dateTime($d/Start) > xs:dateTime($d/End)
return $count