2015-01-28 5 views
0

<End> 번 이후에 <Start> 번이 왔는지 확인하기 위해 XML 문서에서 XQuery를 실행하는 유효성 검사 모듈을 파이썬에 가지고 있으며 그 개수를 반환합니다. 이제이 밀리가 종료 시간에 추가하는 경우를 제외한 모든 경우에 좋은 좋은 작품 XQuery : 밀리 초 단위로 데이터 시간 비교

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> 

이 항상 다음과 같이 쿼리입니다 14가 14.22보다 작음에도 불구하고 True를 반환합니다. 여기서 <Start> 시간에 하나의 소수점 이하 자릿수를 추가하면 작동하지만 더 좋은 해결책이 있습니까?

답변

3

아마 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 
+0

Gunther == 신사 + 학자, 이것으로 해결됩니다! 그러나''xs : dateTime' 대문자 T로 바뀌 었습니다. – tenwest

+0

고마워요. 맞습니다.'xs : dateTime'에 대문자'T'가 있습니다 ;-) – Gunther