2013-07-20 64 views
0

我有以下代碼:動態日期xquery-過濾

<Table><ColumnHeaders> 
<ColumnHeader name='Title' type='xs:string' /> 
<ColumnHeader name='EventDate' type='xs:date' /> 
<ColumnHeader name='today' type='xs:date' /> 
<ColumnHeader name='day-week' type='xs:integer' /> 
<ColumnHeader name='dur-end' type='xs:integer' /> 
<ColumnHeader name='start-date' type='xs:date' /> 
<ColumnHeader name='end-date' type='xs:date' /> 
</ColumnHeaders> 
<Data>{let $today := fn:current-date() 
let $day-week := functx:day-of-week($today) 
let $dur-end := 6-$day-week 
let $start-date := xs:date($today)-(xs:dayTimeDuration('P1D')*$day-week) 
let $end-date := xs:date($today)+(xs:dayTimeDuration('P1D')*$dur-end) 
for $ancestor0 in $queryresponse//*:row 
where ($ancestor0/@ows_EventDate)>=$start-date 
return<Row> 
<Title>{fn:data($ancestor0/@ows_Title)}</Title> 
<EventDate>{fn:data($ancestor0/@ows_EventDate)}</EventDate> 
<today>{fn:data($today)}</today> 
<day-week>{fn:data($day-week)}</day-week> 
<dur-end>{fn:data($dur-end)}</dur-end> 
<start-date>{fn:data($start-date)}</start-date> 
<end-date>{fn:data($end-date)}</end-date> 
</Row>} 
</Data></Table> 

中加入了「聲明」 where子句之後,XQuery的失敗,出現以下錯誤:

ZorbaDynamicException失敗。 Zorba引擎遇到動態錯誤。 錯誤類型:XQuery引擎錯誤。通過的項目(類型UNTYPED_ATOMIC)不能轉換爲傳遞目標類型(xs:date)。

有人能幫我解決這個問題嗎?

+0

我已經在[您的原始問題的答案]中描述過(http://stackoverflow.com/questions/17738471/xquery-to-get-the-date-values-in-current-week):日期您所擁有的代表與XQuery日期不兼容,因此您必須將其轉換。 –

+0

嗨, 我是Xquery的新手,實際上我不明白你對我原來的帖子的回答,我感到不自在地要求你詳細解釋它。這就是爲什麼我嘗試了我自己的邏輯,但不幸的是它並沒有起作用。如果你有一些時間,你可以請嘗試解釋一下細節? 此外,如果有任何xquery書,你會建議初學者,這將是偉大的。 Regards, – Jude

+0

哪部分你不明白?我承認,如果您不習慣使用聲明性語言,那麼學習XQuery一開始並不容易。我不能幫你提供一本書的建議,我在一次大學講座中學到了它。目前的問題是你的日期格式不是標準的ISO日期格式,因此需要對齊,我在我的答案中使用正則表達式解決了這個問題。 –

回答